故障排除
诊断和调试使用 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 链接,可能导致短暂的延迟高峰。
复制特性
- 带有
REDUCE
的VADD
命令不会复制随机投影矩阵。 - 副本将为相同的输入生成不同的投影向量。
这不会影响相似性搜索,但会影响 VEMB
的输出。
总结
症状 | 尝试此操作 |
---|---|
召回率低 | 使用更高的 EF ,检查量化,使用 TRUTH |
过滤器排除过多 | 使用 VGETATTR 验证属性,简化表达式 |
内存高峰 | 使用 REDUCE 、Q8 、更小的 M 、压缩 JSON |
使用 REDUCE 时的复制不匹配 | 避免依赖于副本的投影向量 |