You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.15 09:50:28