mirror of
https://git.mirrors.martin98.com/https://github.com/langgenius/dify.git
synced 2025-05-30 01:55:17 +08:00
fix: time type metadata filtering error (#19192)
This commit is contained in:
parent
e2cae42115
commit
a212a63e6a
@ -7,7 +7,7 @@ from collections.abc import Generator, Mapping
|
|||||||
from typing import Any, Optional, Union, cast
|
from typing import Any, Optional, Union, cast
|
||||||
|
|
||||||
from flask import Flask, current_app
|
from flask import Flask, current_app
|
||||||
from sqlalchemy import Integer, and_, or_, text
|
from sqlalchemy import Float, and_, or_, text
|
||||||
from sqlalchemy import cast as sqlalchemy_cast
|
from sqlalchemy import cast as sqlalchemy_cast
|
||||||
|
|
||||||
from core.app.app_config.entities import (
|
from core.app.app_config.entities import (
|
||||||
@ -1005,28 +1005,24 @@ class DatasetRetrieval:
|
|||||||
if isinstance(value, str):
|
if isinstance(value, str):
|
||||||
filters.append(DatasetDocument.doc_metadata[metadata_name] == f'"{value}"')
|
filters.append(DatasetDocument.doc_metadata[metadata_name] == f'"{value}"')
|
||||||
else:
|
else:
|
||||||
filters.append(
|
filters.append(sqlalchemy_cast(DatasetDocument.doc_metadata[metadata_name].astext, Float) == value)
|
||||||
sqlalchemy_cast(DatasetDocument.doc_metadata[metadata_name].astext, Integer) == value
|
|
||||||
)
|
|
||||||
case "is not" | "≠":
|
case "is not" | "≠":
|
||||||
if isinstance(value, str):
|
if isinstance(value, str):
|
||||||
filters.append(DatasetDocument.doc_metadata[metadata_name] != f'"{value}"')
|
filters.append(DatasetDocument.doc_metadata[metadata_name] != f'"{value}"')
|
||||||
else:
|
else:
|
||||||
filters.append(
|
filters.append(sqlalchemy_cast(DatasetDocument.doc_metadata[metadata_name].astext, Float) != value)
|
||||||
sqlalchemy_cast(DatasetDocument.doc_metadata[metadata_name].astext, Integer) != value
|
|
||||||
)
|
|
||||||
case "empty":
|
case "empty":
|
||||||
filters.append(DatasetDocument.doc_metadata[metadata_name].is_(None))
|
filters.append(DatasetDocument.doc_metadata[metadata_name].is_(None))
|
||||||
case "not empty":
|
case "not empty":
|
||||||
filters.append(DatasetDocument.doc_metadata[metadata_name].isnot(None))
|
filters.append(DatasetDocument.doc_metadata[metadata_name].isnot(None))
|
||||||
case "before" | "<":
|
case "before" | "<":
|
||||||
filters.append(sqlalchemy_cast(DatasetDocument.doc_metadata[metadata_name].astext, Integer) < value)
|
filters.append(sqlalchemy_cast(DatasetDocument.doc_metadata[metadata_name].astext, Float) < value)
|
||||||
case "after" | ">":
|
case "after" | ">":
|
||||||
filters.append(sqlalchemy_cast(DatasetDocument.doc_metadata[metadata_name].astext, Integer) > value)
|
filters.append(sqlalchemy_cast(DatasetDocument.doc_metadata[metadata_name].astext, Float) > value)
|
||||||
case "≤" | "<=":
|
case "≤" | "<=":
|
||||||
filters.append(sqlalchemy_cast(DatasetDocument.doc_metadata[metadata_name].astext, Integer) <= value)
|
filters.append(sqlalchemy_cast(DatasetDocument.doc_metadata[metadata_name].astext, Float) <= value)
|
||||||
case "≥" | ">=":
|
case "≥" | ">=":
|
||||||
filters.append(sqlalchemy_cast(DatasetDocument.doc_metadata[metadata_name].astext, Integer) >= value)
|
filters.append(sqlalchemy_cast(DatasetDocument.doc_metadata[metadata_name].astext, Float) >= value)
|
||||||
case _:
|
case _:
|
||||||
pass
|
pass
|
||||||
return filters
|
return filters
|
||||||
|
@ -6,7 +6,7 @@ from collections import defaultdict
|
|||||||
from collections.abc import Mapping, Sequence
|
from collections.abc import Mapping, Sequence
|
||||||
from typing import Any, Optional, cast
|
from typing import Any, Optional, cast
|
||||||
|
|
||||||
from sqlalchemy import Integer, and_, func, or_, text
|
from sqlalchemy import Float, and_, func, or_, text
|
||||||
from sqlalchemy import cast as sqlalchemy_cast
|
from sqlalchemy import cast as sqlalchemy_cast
|
||||||
|
|
||||||
from core.app.app_config.entities import DatasetRetrieveConfigEntity
|
from core.app.app_config.entities import DatasetRetrieveConfigEntity
|
||||||
@ -493,24 +493,24 @@ class KnowledgeRetrievalNode(LLMNode):
|
|||||||
if isinstance(value, str):
|
if isinstance(value, str):
|
||||||
filters.append(Document.doc_metadata[metadata_name] == f'"{value}"')
|
filters.append(Document.doc_metadata[metadata_name] == f'"{value}"')
|
||||||
else:
|
else:
|
||||||
filters.append(sqlalchemy_cast(Document.doc_metadata[metadata_name].astext, Integer) == value)
|
filters.append(sqlalchemy_cast(Document.doc_metadata[metadata_name].astext, Float) == value)
|
||||||
case "is not" | "≠":
|
case "is not" | "≠":
|
||||||
if isinstance(value, str):
|
if isinstance(value, str):
|
||||||
filters.append(Document.doc_metadata[metadata_name] != f'"{value}"')
|
filters.append(Document.doc_metadata[metadata_name] != f'"{value}"')
|
||||||
else:
|
else:
|
||||||
filters.append(sqlalchemy_cast(Document.doc_metadata[metadata_name].astext, Integer) != value)
|
filters.append(sqlalchemy_cast(Document.doc_metadata[metadata_name].astext, Float) != value)
|
||||||
case "empty":
|
case "empty":
|
||||||
filters.append(Document.doc_metadata[metadata_name].is_(None))
|
filters.append(Document.doc_metadata[metadata_name].is_(None))
|
||||||
case "not empty":
|
case "not empty":
|
||||||
filters.append(Document.doc_metadata[metadata_name].isnot(None))
|
filters.append(Document.doc_metadata[metadata_name].isnot(None))
|
||||||
case "before" | "<":
|
case "before" | "<":
|
||||||
filters.append(sqlalchemy_cast(Document.doc_metadata[metadata_name].astext, Integer) < value)
|
filters.append(sqlalchemy_cast(Document.doc_metadata[metadata_name].astext, Float) < value)
|
||||||
case "after" | ">":
|
case "after" | ">":
|
||||||
filters.append(sqlalchemy_cast(Document.doc_metadata[metadata_name].astext, Integer) > value)
|
filters.append(sqlalchemy_cast(Document.doc_metadata[metadata_name].astext, Float) > value)
|
||||||
case "≤" | "<=":
|
case "≤" | "<=":
|
||||||
filters.append(sqlalchemy_cast(Document.doc_metadata[metadata_name].astext, Integer) <= value)
|
filters.append(sqlalchemy_cast(Document.doc_metadata[metadata_name].astext, Float) <= value)
|
||||||
case "≥" | ">=":
|
case "≥" | ">=":
|
||||||
filters.append(sqlalchemy_cast(Document.doc_metadata[metadata_name].astext, Integer) >= value)
|
filters.append(sqlalchemy_cast(Document.doc_metadata[metadata_name].astext, Float) >= value)
|
||||||
case _:
|
case _:
|
||||||
pass
|
pass
|
||||||
return filters
|
return filters
|
||||||
|
Loading…
x
Reference in New Issue
Block a user