故障排除

诊断和调试使用 Redis 向量集合时出现的问题

常见挑战

向量集合在设计上是近似的。这使得调试比精确匹配查询更困难。本节帮助您理解与召回率、过滤和图结构相关的问题。

低召回率或结果丢失

如果 VSIM 未返回预期项

  • 增加 EF 参数

    VSIM myset VALUES 3 ... COUNT 10 EF 1000
    
  • 检查量化模式。二进制量化(BIN)牺牲精度换取速度。

  • 使用 TRUTH 将结果与线性扫描进行比较

    VSIM myset VALUES 3 ... COUNT 10 TRUTH
    

    这提供了最准确的结果用于验证,但速度较慢。

过滤问题

如果出现以下情况,过滤器会静默排除项:

  • 元素的属性中缺少字段
  • JSON 无效
  • 类型与表达式不匹配(例如,当 .rating 是字符串时使用 .rating > 8

尝试使用 VGETATTR 检索属性

VGETATTR myset myelement

仔细检查字段名、JSON 有效性和值类型。

意外的内存使用

内存问题可能由以下原因引起:

  • 大型向量(使用 REDUCE 进行降维)
  • M 值过高导致链接图膨胀
  • 大型或深度嵌套的 JSON 属性
  • 存储原始 FP32 向量(NOQUANT

使用默认的 Q8 量化和压缩属性以节省空间。

检查图结构

使用 VLINKS 检查节点的连接

VLINKS myset myelement WITHSCORES
  • 帮助您验证是否存在孤立或弱连接的节点。
  • 有助于解释召回率低的原因。

删除高峰

使用 DEL 命令删除大型集合时,Redis 回收内存并重建 HNSW 链接,可能导致短暂的延迟高峰。

复制特性

  • 带有 REDUCEVADD 命令不会复制随机投影矩阵。
  • 副本将为相同的输入生成不同的投影向量。

这不会影响相似性搜索,但会影响 VEMB 的输出。

总结

症状 尝试此操作
召回率低 使用更高的 EF,检查量化,使用 TRUTH
过滤器排除过多 使用 VGETATTR 验证属性,简化表达式
内存高峰 使用 REDUCEQ8、更小的 M、压缩 JSON
使用 REDUCE 时的复制不匹配 避免依赖于副本的投影向量

另请参阅

评价此页面
返回顶部 ↑