diff --git a/api/core/rag/retrieval/dataset_retrieval.py b/api/core/rag/retrieval/dataset_retrieval.py index dd24227f6c..6b220a9d66 100644 --- a/api/core/rag/retrieval/dataset_retrieval.py +++ b/api/core/rag/retrieval/dataset_retrieval.py @@ -1048,9 +1048,9 @@ class DatasetRetrieval: filters.append(sqlalchemy_cast(DatasetDocument.doc_metadata[metadata_name].astext, Float) != value) case "in": if isinstance(value, list | tuple): - if not value: + if not value: return filters - + or_conditions = [] for i, v in enumerate(value): if isinstance(v, str): @@ -1063,7 +1063,7 @@ class DatasetRetrieval: else: v_str = str(v) or_conditions.append(DatasetDocument.doc_metadata[metadata_name] == f'"{v_str}"') - + if or_conditions: filters.append(or_(*or_conditions)) else: @@ -1078,13 +1078,12 @@ class DatasetRetrieval: if isinstance(value, list | tuple): if not value: return filters - + and_conditions = [] for i, v in enumerate(value): if isinstance(v, str): and_conditions.append(DatasetDocument.doc_metadata[metadata_name] != f'"{v}"') elif isinstance(v, int | float): - and_conditions.append( sqlalchemy_cast(DatasetDocument.doc_metadata[metadata_name].astext, Float) != v ) @@ -1092,7 +1091,7 @@ class DatasetRetrieval: else: v_str = str(v) and_conditions.append(DatasetDocument.doc_metadata[metadata_name] != f'"{v_str}"') - + if and_conditions: filters.append(and_(*and_conditions)) else: diff --git a/api/core/workflow/nodes/knowledge_retrieval/knowledge_retrieval_node.py b/api/core/workflow/nodes/knowledge_retrieval/knowledge_retrieval_node.py index ad4a9f46d3..dd314073a2 100644 --- a/api/core/workflow/nodes/knowledge_retrieval/knowledge_retrieval_node.py +++ b/api/core/workflow/nodes/knowledge_retrieval/knowledge_retrieval_node.py @@ -533,14 +533,13 @@ class KnowledgeRetrievalNode(LLMNode): if isinstance(value, list | tuple): if not value: return filters - + # Generate matching conditions for each value, supporting both number and string matching or_conditions = [] for i, v in enumerate(value): if isinstance(v, str): or_conditions.append(Document.doc_metadata[metadata_name] == f'"{v}"') elif isinstance(v, int | float): - or_conditions.append( sqlalchemy_cast(Document.doc_metadata[metadata_name].astext, Float) == v ) @@ -548,7 +547,7 @@ class KnowledgeRetrievalNode(LLMNode): else: v_str = str(v) or_conditions.append(Document.doc_metadata[metadata_name] == f'"{v_str}"') - + if or_conditions: filters.append(or_(*or_conditions)) else: @@ -559,16 +558,15 @@ class KnowledgeRetrievalNode(LLMNode): filters.append(sqlalchemy_cast(Document.doc_metadata[metadata_name].astext, Float) == value) case "not in": if isinstance(value, list | tuple): - if not value: + if not value: return filters - + # generate not in conditions and_conditions = [] for i, v in enumerate(value): if isinstance(v, str): and_conditions.append(Document.doc_metadata[metadata_name] != f'"{v}"') elif isinstance(v, int | float): - and_conditions.append( sqlalchemy_cast(Document.doc_metadata[metadata_name].astext, Float) != v ) @@ -576,7 +574,7 @@ class KnowledgeRetrievalNode(LLMNode): else: v_str = str(v) and_conditions.append(Document.doc_metadata[metadata_name] != f'"{v_str}"') - + if and_conditions: filters.append(and_(*and_conditions)) else: