RedisSearch带时间范围的向量相似性查询出现语法错误求助
RedisSearch带时间范围的向量相似性查询出现语法错误求助
看起来你是想把向量KNN相似性查询和时间范围过滤结合起来,但查询语句的语法结构不对,才触发了这个报错。我来帮你梳理下问题和解决办法:
问题根源
RedisSearch(尤其是Dialect 2版本)的查询语法里,向量KNN的表达式*=>[KNN ...]和额外的过滤条件(比如你的时间范围)不能直接拼接,必须通过WHERE子句来连接过滤条件,否则就会触发语法解析错误。你原来的写法里在KNN表达式后直接加@DateTime:[...],RedisSearch的解析器完全识别不了这种格式。
修正后的代码
把你的查询语句改成下面这样,核心就是用WHERE把KNN查询和时间过滤条件关联起来:
queries = [ "Some text to search", ] query = ( Query('*=>[KNN 10 @vector $query_vector AS vector_score] WHERE @DateTime:[1696672140005 1696958220000]') .sort_by('vector_score') .return_fields('vector_score', 'title', 'DateTime') .dialect(2) ) for i in range(len(queries)): encoded_query = embedder.encode(queries[i]) print(client.ft('idx:myindex').search( query, { 'query_vector': np.array(encoded_query, dtype=np.float32).tobytes() } ).docs)
额外注意点
- 请确认你的索引
idx:myindex里,DateTime字段已经被正确定义为数值类型(因为你存储的是时间戳数字),如果是字符串类型的话,时间范围过滤会不生效或者出问题。 - 如果你想调整返回结果的排序逻辑,比如想优先按相似性(vector_score)排序,你的
sort_by('vector_score')是对的,默认是升序(因为向量距离越小越相似),如果需要降序可以写成sort_by('vector_score', asc=False)。
备注:内容来源于stack exchange,提问作者tarrahi tarrahi
相关产品推荐
相关产品推荐

