过滤向量搜索:ACORN修复了什么,又是什么修复了ACORN

过滤向量搜索:ACORN修复了什么,又是什么修复了ACORN

💡 原文英文,约2100词,阅读约需8分钟。
📝

内容提要

Qdrant对比了两种过滤向量搜索修复方案:Filterable HNSW在索引时添加额外边,ACORN在查询时检查邻居的邻居。基准测试显示,单一过滤器下Filterable HNSW表现更优,但AND组合过滤器两者都失效。Qdrant的查询规划器结合两者,在默认配置下多数过滤器保持高召回率,ACORN仅在特定场景(如无额外边的字段)值得启用,但会增加延迟。

🔎

延伸解读

两种修复思路的取舍

文章对比了两种过滤向量搜索的修复方案:Filterable HNSW在索引时添加额外边,ACORN在查询时检查邻居的邻居。前者构建时间增加4.4至5.6倍,后者查询延迟增加2.1至2.9倍。单一过滤器下,Filterable HNSW通常更优,但AND组合过滤器两者都失效。理解这种取舍有助于根据场景选择合适方案。

ACORN的适用场景

ACORN并非总是必要。在默认配置下,Qdrant的查询规划器结合了多种策略,多数过滤器保持高召回率。ACORN仅在特定场景值得启用,例如当payload字段因值过多而未被添加额外边时。但启用ACORN会增加延迟,因此建议先测量召回率,再决定是否开启。

测量与调优建议

文章建议用户测量各过滤器形状的召回率,特别是覆盖约五分之一集合的值和AND组合。创建payload索引,并对比ACORN开关的召回率和延迟。如果某个过滤器召回率低,ACORN可能有效;如果召回率已高,则无需开启。Qdrant默认关闭ACORN,仅在max_selectivity以下应用。

Q&A

ACORN和Filterable HNSW在修复过滤向量搜索时有什么不同?

Filterable HNSW在索引时为共享相同字段值的点添加额外边,而ACORN在查询时检查邻居的邻居。Filterable HNSW增加构建时间,ACORN增加查询延迟。

为什么过滤向量搜索在元数据过滤严格时会失效?

当元数据过滤严格时,HNSW图中能遍历的边减少,导致图被分割成孤立的岛屿,搜索无法到达真正的最近邻。

在单一过滤器下,Filterable HNSW和ACORN哪个性能更好?

在单一过滤器下,Filterable HNSW通常优于ACORN,召回率更高且延迟更低。但ACORN在特定场景(如无额外边的字段)下可能更优。

为什么AND组合过滤器会导致Filterable HNSW和ACORN都失效?

因为Filterable HNSW只为单个字段建边,不为字段组合建边,所以AND过滤器落在没有额外边的交集上;ACORN在低选择性时召回率下降,且两者在AND组合下都表现不佳。

Qdrant的查询规划器如何结合Filterable HNSW和ACORN?

Qdrant的查询规划器根据过滤器选择性自动选择路径:使用图、ACORN或直接读取payload索引。默认配置下,多数过滤器保持高召回率,ACORN仅在特定场景下启用。

在什么情况下应该启用ACORN?

当过滤器匹配的字段没有额外边(如值太常见或字段未被索引)时,ACORN值得启用。但会增加延迟,Qdrant默认关闭,仅在max_selectivity以下应用。

如何测量自己集合上的过滤搜索性能?

建议测量各过滤器形状的召回率,创建payload索引,对比ACORN开关的召回率和延迟。特别关注覆盖约五分之一集合的值和AND组合。

🏷️

标签

➡️

继续阅读