diff --git a/api/core/rag/retrieval/dataset_retrieval.py b/api/core/rag/retrieval/dataset_retrieval.py index 6978860529..d680d36f3b 100644 --- a/api/core/rag/retrieval/dataset_retrieval.py +++ b/api/core/rag/retrieval/dataset_retrieval.py @@ -1058,6 +1058,20 @@ class DatasetRetrieval: filters.append(sqlalchemy_cast(DatasetDocument.doc_metadata[metadata_name].astext, Float) <= value) case "≥" | ">=": filters.append(sqlalchemy_cast(DatasetDocument.doc_metadata[metadata_name].astext, Float) >= value) + case "in": + values = [] + if isinstance(value, str): + if value.strip(): # 非空字符串 + values = [v.strip() for v in value.split(',')] + elif isinstance(value, list): + values = value # 或者进行其他处理 + + if not values: + filters.append(1 == 2) + else: + filters.append( + (text("documents.doc_metadata ->> :key in :value")).params(key=metadata_name, value=tuple(values)) + ) case _: pass return filters 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 fc31f8f170..5b61ba1579 100644 --- a/api/core/workflow/nodes/knowledge_retrieval/knowledge_retrieval_node.py +++ b/api/core/workflow/nodes/knowledge_retrieval/knowledge_retrieval_node.py @@ -533,10 +533,16 @@ class KnowledgeRetrievalNode(LLMNode): case "≥" | ">=": filters.append(sqlalchemy_cast(Document.doc_metadata[metadata_name].astext, Float) >= value) case "in": - if value is None or value == "": + values = [] + if isinstance(value, str): + if value.strip(): # 非空字符串 + values = [v.strip() for v in value.split(',')] + elif isinstance(value, list): + values = value # 或者进行其他处理 + + if not values: filters.append(1 == 2) else: - values = value.split(',') filters.append( (text("documents.doc_metadata ->> :key in :value")).params(key=metadata_name, value=tuple(values)) )