Elasticsearch Vector DiskBBQ 过滤搜索现已提升 3 – 5 倍速度

作者:来自 Elastic Benjamin Trent

了解 Elasticsearch 9.4 如何通过避免在高选择性场景下浪费 centroid 和 postings-list 工作,使受限过滤条件下的 DiskBBQ 向量搜索速度提升 3--5 倍,并且更加稳定。

从向量搜索到强大的 REST API,Elasticsearch 为开发者提供了最全面的搜索工具集。你可以深入 Elasticsearch Labs 仓库中的示例 notebooks,尝试新的功能。你也可以立即开始免费试用,或在本地运行 Elasticsearch。


Elasticsearch 9.4 让受限过滤条件下的 DiskBBQ 向量搜索速度提升了 3--5 倍。DiskBBQ 是 Elasticsearch 新的基于分区(partition based)的索引。它致力于通过让向量索引尽可能贴合底层系统,在成本与性能之间实现最佳平衡。虽然 DiskBBQ 在宽松过滤条件下表现良好,但在受限过滤条件下表现较差。为了继续推进简单、快速、高效的向量索引,我们调整了过滤应用方式,并显著改善了延迟表现。

为什么过滤 partition indices 很困难

对于 partition indices,所有搜索都分为两个阶段:

  • 找到最近的 centroids。
  • 在最近 centroids 的 clusters 中找到最近的 vectors。

对于 DiskBBQ,centroids 会被量化(quantized),并且可能会被索引到它们自己的结构中。cluster 内容(下面我们称之为 postings lists)会以一种尽可能加速 vector scoring 的方式进行布局。

postings 以 32 个为一个 block 进行存储,每个 block 内按 doc_id 顺序排列。doc IDs 使用 delta encoding,以较低解码开销来最小化磁盘占用。

vector 值同样采用 block encoding,将维度数据与量化修正值(quantized corrections)分离,从而通过我们优化后的 kernels 最大化 SIMD(single instruction, multiple data)吞吐量。

复制代码
Vector Cluster (Posting List) layout
  | metadata |
  | doc_deltas[32] | vec_quant[32] | vec_quant_corrections[32] |
  | doc_deltas[32] | vec_quant[32] | vec_quant_corrections[32] |
  | ... |
  | doc_deltas[T]  | vec_quant[T]  | vec_quant_corrections[T]  |   (T <= 32)

一旦我们到达 postings list,其布局已经针对快速 scoring 与 filtering 做了优化。例如,如果提供了 index sort,那么匹配过滤条件的 vector blocks 会在 list 中一起存储和评分。这使得系统能够一次性对连续 vector blocks 进行 scoring,从而充分利用底层 CPU 吞吐能力。

不过,在真正检查 doc_ids 之前,我们并不知道某个 cluster 是否匹配给定 filter。一旦验证完成,我们就能确保只对相关 vectors 进行 scoring。在受限过滤场景下,我们可能检查了一个 centroid,却发现其中没有任何 vector 匹配 filter。为了补偿这一点,我们会持续对 centroids 进行 scoring 和探索,直到获得足够具有代表性的 vector 集合用于 scoring。

这意味着在受限过滤条件下会产生大量浪费工作。我们会对 centroids 进行 scoring,但并不知道它们是否包含与 filter 相关的 vectors;准备对 postings list 进行 scoring,最后却发现其中没有任何 block 适用。这些浪费的计算会不断累积:

  • 不必要地对 centroid 进行 scoring。
  • 因为 postings list 接近 query vector 而加载它,即使它最终会被 filter 掉。
  • 解码并检查 list 中的 document IDs,最后才发现没有任何一个匹配。
  • 继续搜索,可能再次命中另一个完全被 filter 掉的 centroid,直到访问足够多的 centroids 来达到目标 recall。

下面是一个展示旧流程的示例:检查所有 centroids,查看哪些匹配,然后移动到包含匹配 vectors 的 centroids。不断重复这一过程。
https://www.bilibili.com/video/BV12x5D6tERG/

这是新的方式。当检测到存在受限过滤条件时,直接跳转到经过过滤后的 centroids。

基准测试,基准测试,还是基准测试

下面是一个带随机 filter 的宏基准测试。这里故意使用了极端 filter selectivity,以展示在超高限制过滤条件下的显著提升。在这里,我们看到接近一个数量级的性能提升。

过去,当 filter 变得非常受限时,延迟会出现非常糟糕的 "肘部" 拐点(horrible elbow)。而现在,延迟保持稳定,并且实际上会随着 filter 越来越受限而继续改善。

另一个验证来自我们在 rally 上运行的 so-vector 夜间运行,它展示了改进。

你可以通过在 rally 配置中的 vector_index_type 中指定 bbq_disk 来自己尝试这一点。

接下来是什么?

这项功能目前已在 Elastic Serverless 中上线,并将包含在 9.4.0 Stack 版本中。我们并不会停止对 Elasticsearch 向量搜索的改进。这只是我们持续前进的一步,目标是为你带来更简单、更高效、更实用且更快速的向量搜索。

非常感谢你使用我们编写的代码。我们 ❤️ 你。

原文:https://www.elastic.co/search-labs/blog/faster-restrictive-filters-diskbbq

相关推荐
每日综合1 小时前
拳破巅峰,薪火相传——奥运冠军蔡良蝉的搏击征程
人工智能
汽车仪器仪表相关领域1 小时前
HORIBA MEXA-584L 全功能汽车排放废气分析仪:便携精准排放检测 + 多参数同步测量 + 国六 / 欧 7 合规适配,汽车检测与调校的黄金标准
服务器·数据库·人工智能·功能测试·汽车·压力测试·可用性测试
热心网友俣先生1 小时前
2026年认证杯二阶段A题赛题解析
人工智能·算法·机器学习
华万通信king1 小时前
OpenClaw MCP工具链开发实战:打造专属AI助手工具集
人工智能
中伟视界1 小时前
【技术方案】煤矿皮带下料口堵料监测:基于 AI 防爆摄像机的联动控制实现
人工智能·工业视觉·矿山智能化·皮带运输安全·堵料监测
189228048611 小时前
NV232固态闪存MT29F32T08GWLBHD6-TES:B
大数据·服务器·人工智能·科技·缓存
头盔小妹1 小时前
《计算机工程与应用》2026年投稿经验分享
人工智能·深度学习
时空无限1 小时前
transformer自注意力机制的核心理解
人工智能·深度学习·transformer
Biocloudy1 小时前
循环肿瘤细胞的分离和分型技术
人工智能·经验分享·笔记·其他