From 1d383c4ee2ae58dee48e0f646952cf7885449ac4 Mon Sep 17 00:00:00 2001 From: Qun <51054082+QunBB@users.noreply.github.com> Date: Fri, 10 Jul 2026 23:06:22 +0800 Subject: [PATCH] fix(vector-stores): improve milvus wildcard search (#6187) --- mem0/vector_stores/milvus.py | 5 ++++- tests/vector_stores/test_milvus.py | 8 ++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/mem0/vector_stores/milvus.py b/mem0/vector_stores/milvus.py index 748553ccc..e6e056bf1 100644 --- a/mem0/vector_stores/milvus.py +++ b/mem0/vector_stores/milvus.py @@ -159,7 +159,10 @@ class MilvusDB(VectorStoreBase): for key, value in filters.items(): if not self._SAFE_FILTER_KEY.match(key): raise ValueError(f"Invalid filter key: {key!r}") - if isinstance(value, str): + if value == "*": + # Wildcard - match any value (MilvusDB doesn't have direct wildcard, so we skip this filter) + continue + elif isinstance(value, str): escaped = value.replace("\\", "\\\\").replace('"', '\\"') operands.append(f'(metadata["{key}"] == "{escaped}")') elif isinstance(value, (int, float, bool)): diff --git a/tests/vector_stores/test_milvus.py b/tests/vector_stores/test_milvus.py index e17aa3b67..517b3ad04 100644 --- a/tests/vector_stores/test_milvus.py +++ b/tests/vector_stores/test_milvus.py @@ -107,6 +107,14 @@ class TestMilvusDB: assert 'metadata["category"] == "work"' in filter_str assert ' and ' in filter_str + def test_create_filter_wildcard_conditions(self, milvus_db): + """Test filter creation with wildcard conditions.""" + filters = {"user_id": "alice", "run_id": "*"} + filter_str = milvus_db._create_filter(filters) + + assert 'metadata["user_id"] == "alice"' in filter_str + assert 'metadata["run_id"] == "*"' not in filter_str + def test_search_with_filters(self, milvus_db, mock_milvus_client): """Test search with metadata filters (reproduces user's bug scenario).""" # Setup mock return value