fix(vector-stores): improve milvus wildcard search (#6187)
This commit is contained in:
@@ -159,7 +159,10 @@ class MilvusDB(VectorStoreBase):
|
|||||||
for key, value in filters.items():
|
for key, value in filters.items():
|
||||||
if not self._SAFE_FILTER_KEY.match(key):
|
if not self._SAFE_FILTER_KEY.match(key):
|
||||||
raise ValueError(f"Invalid filter key: {key!r}")
|
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('"', '\\"')
|
escaped = value.replace("\\", "\\\\").replace('"', '\\"')
|
||||||
operands.append(f'(metadata["{key}"] == "{escaped}")')
|
operands.append(f'(metadata["{key}"] == "{escaped}")')
|
||||||
elif isinstance(value, (int, float, bool)):
|
elif isinstance(value, (int, float, bool)):
|
||||||
|
|||||||
@@ -107,6 +107,14 @@ class TestMilvusDB:
|
|||||||
assert 'metadata["category"] == "work"' in filter_str
|
assert 'metadata["category"] == "work"' in filter_str
|
||||||
assert ' and ' 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):
|
def test_search_with_filters(self, milvus_db, mock_milvus_client):
|
||||||
"""Test search with metadata filters (reproduces user's bug scenario)."""
|
"""Test search with metadata filters (reproduces user's bug scenario)."""
|
||||||
# Setup mock return value
|
# Setup mock return value
|
||||||
|
|||||||
Reference in New Issue
Block a user