Closed
Description
I need to perform VectorQuery with text filters plus highlight but it fails with: redisvl.exceptions.RedisSearchError: Error while searching: Property vector_distance is not in schema
The same works OK for FilterQuery.
Folllowing is a working example:
import sys
sys.path.append('.')
import numpy as np
from src.store.get_redis import getRedis
from redisvl.index import SearchIndex
from redisvl.query.filter import Tag, Num, FilterExpression, Text
from redisvl.query import VectorQuery, FilterQuery
def vector_highlight_issue():
r = getRedis()
r.flushall()
schema = {
"index": {
"name": "user_simple",
"prefix": "user_simple_docs",
},
"fields": [
{"name": "user", "type": "text"},
{"name": "credit_score", "type": "tag"},
{"name": "job", "type": "text"},
{"name": "age", "type": "numeric"},
# {"name": "vector_distance", "type": "numeric"},
{
"name": "user_embedding",
"type": "vector",
"attrs": {
"dims": 3,
"distance_metric": "cosine",
"algorithm": "flat",
"datatype": "float32"
}
},
]
}
data = [
{
'user': 'Sebastian Gurin',
'age': 1,
'job': 'engineer',
'credit_score': 'high',
'user_embedding': np.array([0.4, 0.3, 0.5], dtype=np.float32).tobytes()
},
{
'user': 'Sebastian Martinez',
'age': 2,
'job': 'doctor',
'credit_score': 'low',
'user_embedding': np.array([0.1, 0.1, 0.5], dtype=np.float32).tobytes()
},
{
'user': 'Maria Cristina Miños',
'age': 3,
'job': 'dentist',
'credit_score': 'medium',
'user_embedding': np.array([0.9, 0.9, 0.1], dtype=np.float32).tobytes()
}
]
index = SearchIndex.from_dict(schema)
index.set_client(r)
index.create(overwrite=True)
keys = index.load(data)
filter_expression = Text("user") % "Sebas*"
return_fields = ["user", "age", "job", "credit_score"]
query = VectorQuery(
vector=[0.1, 0.1, 0.5],
vector_field_name="user_embedding",
return_fields=return_fields,
num_results=3,
filter_expression=filter_expression,
)
query.highlight(fields=['user'])
# FilterQuery + highlight works fine:
# query = FilterQuery(
# return_fields=return_fields,
# num_results=3
# )
# query.set_filter(filter_expression)
# query.highlight(fields=['user'])
results = index.query(query)
print('LEN', len(results))
for doc in results:
print(doc)
if __name__ == "__main__":
vector_highlight_issue()