From 63a38a8be721cda99c3aa24239f1a285c160ec4b Mon Sep 17 00:00:00 2001
From: Luo Peng <luopeng.he@gmail.com>
Date: Tue, 21 May 2024 03:58:54 +0800
Subject: [PATCH] Fix the expression construction of Milvus vector store
 (#13591)

---
 .../llama_index/vector_stores/milvus/base.py             | 9 +++++----
 .../llama-index-vector-stores-milvus/pyproject.toml      | 2 +-
 2 files changed, 6 insertions(+), 5 deletions(-)

diff --git a/llama-index-integrations/vector_stores/llama-index-vector-stores-milvus/llama_index/vector_stores/milvus/base.py b/llama-index-integrations/vector_stores/llama-index-vector-stores-milvus/llama_index/vector_stores/milvus/base.py
index 2655abb4d..71cdff444 100644
--- a/llama-index-integrations/vector_stores/llama-index-vector-stores-milvus/llama_index/vector_stores/milvus/base.py
+++ b/llama-index-integrations/vector_stores/llama-index-vector-stores-milvus/llama_index/vector_stores/milvus/base.py
@@ -50,7 +50,7 @@ def extract_host_port(url):
     return host, port
 
 
-def _to_milvus_filter(standard_filters: MetadataFilters) -> List[str]:
+def _to_milvus_filter(standard_filters: MetadataFilters) -> str:
     """Translate standard metadata filters to Milvus specific spec."""
     filters = []
     for filter in standard_filters.legacy_filters():
@@ -58,7 +58,8 @@ def _to_milvus_filter(standard_filters: MetadataFilters) -> List[str]:
             filters.append(str(filter.key) + " == " + '"' + str(filter.value) + '"')
         else:
             filters.append(str(filter.key) + " == " + str(filter.value))
-    return filters
+    joined_filters = f" {standard_filters.condition.value} ".join(filters)
+    return f"({joined_filters})" if len(filters) > 1 else joined_filters
 
 
 class MilvusVectorStore(BasePydanticVectorStore):
@@ -385,7 +386,7 @@ class MilvusVectorStore(BasePydanticVectorStore):
 
         # Parse the filter
         if query.filters is not None:
-            expr.extend(_to_milvus_filter(query.filters))
+            expr.append(_to_milvus_filter(query.filters))
 
         # Parse any docs we are filtering on
         if query.doc_ids is not None and len(query.doc_ids) != 0:
@@ -406,7 +407,7 @@ class MilvusVectorStore(BasePydanticVectorStore):
         # Convert to string expression
         string_expr = ""
         if len(expr) != 0:
-            string_expr = f" {query.filters.condition.value} ".join(expr)
+            string_expr = f" and ".join(expr)
 
         # Perform the search
         if query.mode == VectorStoreQueryMode.DEFAULT:
diff --git a/llama-index-integrations/vector_stores/llama-index-vector-stores-milvus/pyproject.toml b/llama-index-integrations/vector_stores/llama-index-vector-stores-milvus/pyproject.toml
index d83ef5813..e2d18caaa 100644
--- a/llama-index-integrations/vector_stores/llama-index-vector-stores-milvus/pyproject.toml
+++ b/llama-index-integrations/vector_stores/llama-index-vector-stores-milvus/pyproject.toml
@@ -27,7 +27,7 @@ exclude = ["**/BUILD"]
 license = "MIT"
 name = "llama-index-vector-stores-milvus"
 readme = "README.md"
-version = "0.1.13"
+version = "0.1.14"
 
 [tool.poetry.dependencies]
 python = ">=3.8.1,<4.0"
-- 
GitLab