Skip to content

VectorQuery + highlight() fails #266

Closed
@cancerberoSgx

Description

@cancerberoSgx

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()

Metadata

Metadata

Assignees

Labels

bugSomething isn't working

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions