Skip to content
阅读进度

Exact 与 HNSW 双路径为什么有必要? ​

返回 工程项目复盘 目录

标准回答 ​

我保留 Exact 和 HNSW 两条路径,是为了让近似检索有可对照的质量基线。Exact 在给定向量和距离度量下计算精确近邻;HNSW 用近似搜索降低某些规模下的查询成本,但可能损失部分近邻结果。

因此我不会因为建了 HNSW 索引就默认所有查询都切过去。EachOf 的设计是看召回质量和延迟是否满足准入条件,不满足时保留 Exact 路径。对照时需要固定数据快照、Embedding 模型、过滤条件和 Top-K,否则无法判断差异究竟来自索引还是其他变量。

权限过滤尤其值得关注。一个不加过滤的查询可能返回很多近邻,但限定到某个项目后,有效候选可能变少。我要比较的是最终允许返回的结果集合,而不是只展示一个不带业务约束的搜索耗时。

这个设计也有成本。大数据量下 Exact 可能很慢,回退不能作为无限容量的保险。当前双路径说明我保留了验证与退化选择,并不代表已经证明在任意规模上都能低延迟运行。

关键机制 ​

  • 比较时固定数据快照、向量模型、过滤条件和 Top-K;召回损失与用户相关性评估是不同指标。
  • HNSW 的构建和查询参数影响索引成本、内存、延迟与召回;过滤后候选不足也要覆盖。
  • 大规模回退 Exact 可能显著增加成本,需要控制并发和退化行为,不能把回退当成无代价保险。

通俗例子 ​

某查询带严格项目权限过滤,ANN 产生的有效候选很少。应比较最终可见集合与 Exact 基线,而不只测未加过滤的查询速度。

追问与回答 ​

小数据为什么还需要 HNSW? ​

小数据不一定需要,Exact 可能更简单,也足够快。我保留 HNSW 是为了在数据增长时能够对照评估,而不是为了让每个请求都使用近似检索。索引构建、内存和参数调优都有成本,在现有规模没有收益时,坚持 Exact 是合理选择。

自动回退怎样触发? ​

这里要区分两件事:一种是离线评估不达标,就不允许某组查询配置启用 ANN;另一种是线上单次请求出现候选不足等情况,再尝试 Exact。项目材料明确的是质量与延迟准入和回退路径,具体属于哪一层、阈值多少,要以实现为准。我不会把“保留回退”直接说成已经实现了逐请求质量判断,因为在线并不能免费知道一次 ANN 漏掉了什么。

易混淆点 ​

材料未给出具体准入阈值和大规模压测结果,不要虚构“低于某毫秒”或“百万级已经验证”。

参考资料 ​

内容来源 ​

用完整回答理解机制,用真实证据解释项目。