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():
|
||||
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)):
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user