过滤向量搜索:ACORN解决了什么,又有什么解决了ACORN

过滤向量搜索:ACORN解决了什么,又有什么解决了ACORN

💡 原文英文,约1500词,阅读约需6分钟。
📝

内容提要

本文评测了Qdrant中ACORN与Filterable HNSW两种过滤向量搜索方案。ACORN在查询时修补图,但延迟高、召回有限;Filterable HNSW在索引时加边,更高效。单过滤时后者胜出,双过滤时ACORN仅在无额外边的字段占优。建议为过滤字段建索引,并视情况启用ACORN。

🔎

延伸解读

ACORN-1的适用边界

ACORN-1在查询时修补图,能显著提升召回,但延迟增加2至3倍,且在过滤选择性低至1%时召回率仅67.7%,效果有限。它仅在字段没有额外边时表现优于Filterable HNSW,例如20%单过滤场景。因此,ACORN并非万能,更适合作为补充手段,而非默认选择。

索引构建的权衡

Filterable HNSW在索引时添加额外边,构建时间增加2.6至3.3倍,但查询延迟更低,单过滤时召回率可达99%以上。相比之下,ACORN不增加构建成本,但查询时需付出更高延迟。选择哪种方案需权衡构建时间与查询性能,若查询频繁,Filterable HNSW可能更划算。

双过滤的挑战

双字段AND过滤时,即使每个字段都有额外边,交集仍可能缺乏连接,导致Filterable HNSW召回率下降(如1%选择性时仅70.8%)。此时ACORN与Filterable HNSW性能相近,但提高搜索预算(ef)后,Filterable HNSW能以更低延迟达到更高召回。对于极低选择性(0.012%),直接使用负载索引扫描更有效。

实践建议

文章建议为所有过滤字段创建负载索引,以支持额外边的构建。同时,利用遥测端点监控查询路径,若字段值组过大导致无额外边,可考虑启用ACORN并测量效果。基准测试结果可能因版本而异,建议使用复现工具包在自身环境验证。

Q&A

ACORN和Filterable HNSW在Qdrant中分别如何解决过滤向量搜索的问题?

ACORN在查询时修补图,通过检查邻居的邻居来绕过被过滤掉的点;Filterable HNSW在索引时添加额外边,为有索引的字段值建立连接,使过滤后的图保持连通。

在单过滤条件下,ACORN和Filterable HNSW的召回率和延迟表现如何?

在单过滤条件下,Filterable HNSW在10%、1%和相关的10%过滤上召回率达到99.0%-99.8%,延迟1.0-1.2ms;ACORN在相同过滤上召回率接近但延迟3.5-4.7ms。在20%过滤上,ACORN召回率98.9%优于Filterable HNSW的94.8%,但延迟4.4ms对1.2ms。

在双过滤(AND)条件下,ACORN和Filterable HNSW的表现有何差异?

在双过滤下,ACORN在4%交集上胜出(95.2% vs 63.7%),但在1%交集上两者接近(72.7% vs 70.8%),且当搜索预算提高时,Filterable HNSW以更低延迟达到更高召回(ef=512时91.2% vs 90.3%,延迟4.9ms vs 20.1ms)。在0.012%极低选择性时,两者都失效,需依赖payload索引。

ACORN在什么情况下会胜出?

ACORN在查询字段没有额外边时胜出,例如字段值组过大导致Qdrant跳过额外边的情况。在基准测试中,ACORN在20%单过滤和4%双过滤上表现更好,因为这些字段没有额外边。

为什么建议为过滤字段创建payload索引?

因为payload索引是构建额外边的前提,这些额外边能显著提升过滤查询的召回率和降低延迟。没有索引,过滤查询可能因图断裂而失败。

如何决定是否启用ACORN?

可以通过telemetry端点检查工作负载的路径。如果过滤字段没有额外边(例如值组过大),可以按查询启用ACORN并测量效果。

🏷️

标签

➡️

继续阅读