故障排查
提示
来自deepseek解释
原文链接:https://redis.io/docs/latest/develop/data-types/vector-sets/troubleshooting/
常见挑战
向量集合本质上是近似搜索。这使得调试比精确匹配查询更加棘手。本节帮助您理解召回率、过滤和图结构方面的问题。
召回率低或结果缺失
如果 VSIM 未返回预期的条目:
提高
EF参数:bashVSIM myset VALUES 3 ... COUNT 10 EF 1000检查量化模式。二进制量化(
BIN)以牺牲精度为代价换取速度。使用
TRUTH将结果与线性扫描进行比较:bashVSIM myset VALUES 3 ... COUNT 10 TRUTH这将为您提供最准确的验证结果,但速度较慢。
过滤问题
如果出现以下情况,过滤器会静默地排除条目:
- 元素的属性中缺少该字段
- JSON 无效
- 类型与表达式不匹配(例如,当
.rating是字符串时使用.rating > 8)
尝试使用 VGETATTR 检索属性:
bash
VGETATTR myset myelement仔细检查字段名称、JSON 有效性和值类型。
意外的内存使用
内存问题可能源于:
- 向量过大(使用
REDUCE进行降维) - 较高的
M值导致链接图膨胀 - 过大或深度嵌套的 JSON 属性
- 存储原始
FP32向量(NOQUANT)
使用默认的 Q8 量化和紧凑的属性以节省空间。
检查图结构
使用 VLINKS 检查节点的连接:
bash
VLINKS myset myelement WITHSCORES- 帮助您验证是否存在孤立或连接稀疏的节点。
- 对解释召回率不佳很有用。
删除尖峰
使用 DEL 命令删除大型集合时,由于 Redis 回收内存并重建 HNSW 链接,可能会短暂出现延迟尖峰。
复制特性
- 带有
REDUCE的VADD不会复制随机投影矩阵。 - 对于相同的输入,副本将产生不同的投影向量。
这不会影响相似性搜索,但会影响 VEMB 的输出。
总结
| 症状 | 尝试以下方法 |
|---|---|
| 召回率不佳 | 使用更高的 EF,检查量化模式,使用 TRUTH |
| 过滤排除过多 | 使用 VGETATTR 验证属性,简化表达式 |
| 内存激增 | 使用 REDUCE、Q8、较小的 M、紧凑的 JSON |
| 使用 REDUCE 时复制不匹配 | 避免依赖来自副本的投影向量 |