Elasticsearch:过滤 HNSW 搜索,快速模式

news2025/5/17 21:20:56

作者:来自 Elastic Benjamin Trent

通过我们的 ACORN-1 算法实现,探索我们对 Apache Lucene 中的 HNSW 向量搜索所做的改进。

多年来,Apache Lucene 和 Elasticsearch 一直支持使用 kNN 查询的过滤搜索,允许用户检索符合指定元数据过滤器(metadata filter)的最近邻居。然而,处理半限制性(semi-restrictive)过滤器时性能总会受到影响。在 Apache Lucene 中,我们引入了 ACORN-1 的变体 —— 一种用于过滤 kNN 搜索的新方法,可实现高达 5 倍的速度提升且召回率几乎没有下降的搜索速度。

本博客将讨论过滤 HNSW 搜索所面临的挑战,解释了为什么随着过滤的增加性能会变慢,以及我们如何使用 ACORN-1 算法改进 Apache Lucene 中的 HNSW 向量搜索。

为什么搜索较少的文档实际上速度更慢

与直觉相反,过滤文档(从而减少候选数量)实际上会使 kNN 搜索变得更慢。对于传统的词汇搜索,更少的文档意味着更少的评分操作,意味着更快的搜索。然而,在 HNSW 图中,主要成本是识别 k 个最近邻居所需的向量比较次数。在某些过滤器集大小下,向量比较的次数可能会显著增加,从而降低搜索性能。

这是未过滤图形搜索的一个例子。请注意,有大约 6 个向量运算。

由于 Apache Lucene 中的 HNSW 图在构建时并不了解过滤标准,因此它纯粹基于向量相似性进行构建。当应用过滤器检索 k 个最近邻居时,搜索过程会遍历更多的图。发生这种情况的原因是,局部图邻域内的自然最近邻可能会被过滤掉,从而需要更深入的探索并增加向量比较的次数。

请注意入口点和第一个有效过滤集之间的过滤 “差距”。在典型的图表中,可能会存在这样的差距,导致探索过早结束并导致召回率不佳。

我们必须加快速度

由于该图并未考虑过滤条件,我们需要对图进行更深入的探索。此外,为了避免陷入死胡同,我们必须对被过滤掉的节点执行向量比较。那么,如何在避免卡住的同时减少向量操作的数量呢?这正是Liana Patel等人在他们的 ACORN 论文中所解决的核心问题。

虽然本文讨论了多种图形技术,但我们关心的 Apache Lucene 具体算法是他们的 ACORN-1 算法。主要思想是你只探索满足你的过滤的节点。为了补偿增加的稀疏性,ACORN-1 将探索范围扩展到邻近区域之外。现在,我们不再只是探索直接的邻居,还探索每个邻居的邻居。这意味着对于具有 32 个连接的图,探索不会只查看最近的 32 个邻居,而是会尝试在 32*32=1024 个扩展邻域中寻找匹配的邻居。

在 Lucene 中,我们通过以下方式对 ACORN-1 算法进行了轻微的调整。仅当邻域中超过 10% 的向量被过滤掉时,才会探索扩展邻域。此外,如果我们已经获得至少 neighborCount * 1.0/(1.0 - neighborFilterRatio) 的分数,就不会探索扩展邻域。这使得搜索者能够利用连接更紧密的邻域,其中邻域连通性与过滤器高度相关。

我们还注意到,无论是在逆相关过滤器(例如,仅匹配远离查询向量的向量的过滤器)还是极其严格的过滤器中,仅探索每个邻居的邻域是不够的。当没有找到通过过滤器的有效向量时,搜索器还将尝试比邻居的邻居分支得更远。然而,为了防止在图中迷失,这种额外的探索是有限的。

数字不会说谎

在多个真实世界的数据集中,这种新的过滤方法带来了显著的速度提升。以下是对 100 万 Cohere 向量按 0.05% 进行随机过滤的效果:

左上方是 “获胜”,表明该候选人明显更胜一筹。然而,为了达到相同的召回率,需要调整搜索参数(例如 num_candidates)。

为了进一步研究随着更多向量通过过滤器而导致的改进减少,我们对 8M Cohere Wiki 文档数据集进行了另一项测试。一般来说,无论过滤的向量数量有多少,你都希望获得更高的召回率,同时访问的向量更少。量化这一点的一个简单方法是检查召回率与访问率的比率

在这里,我们看到新的过滤搜索方法如何实现更好的召回率 vs. 访问率。

显然,当达到 60% 左右时,改进水平将会下降或者消失。因此在 Lucene 中,只有当 40% 以上的向量被过滤掉时,才会使用这个新算法。

即使我们的夜间 Lucene 基准测试也因这一变化而取得了令人瞩目的进步。

必须快点

通过元数据过滤 kNN 搜索是实际用例的关键。在 Lucene 10.2 中,我们将其速度提高了 5 倍,使用了更少的资源,并且保持了较高的召回率。我非常高兴能够在未来的 Elasticsearch v9 版本中将它交到用户手中。

Elasticsearch 包含许多新功能,可帮助你为你的用例构建最佳的搜索解决方案。深入了解我们的示例笔记本以了解更多信息,开始免费云试用,或立即在本地机器上试用 Elastic。

原文:Filtered HNSW search, fast mode - Elasticsearch Labs

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2307824.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【AI测试学习】AnythingLLM+Ollama+DeepSeek部署私人知识库

1.搭建DeepSeek大语言模型 1.1Ollama大预言模型部署 Ollama简化了大型语言模型的运行,让每个人都能在本地轻松体验AI的强大,打开浏览器-下载Ollama-输入命令-搞定,这是本地部署大语言模型的全新方式。 这里我们借助Ollama大预言模型部署工具进行搭建 官网如下:Ollama …

通义灵码插件安装入门教学 - IDEA(安装篇)

在开发过程中,使用合适的工具和插件可以极大地提高我们的工作效率。今天,我们将详细介绍如何在 IntelliJ IDEA 中安装并配置通义灵码插件,这是一款旨在提升开发者效率的实用工具。无论你是新手还是有经验的开发者,本文都将为你提供…

ES、OAS、ERP、电子政务、企业信息化(高软35)

系列文章目录 ES、OAS、ERP、电子政务、企业信息化 文章目录 系列文章目录前言一、专家系统(ES)二、办公自动化系统(OAS)三、企业资源规划(ERP)四、典型信息系统架构模型1.政府信息化和电子政务2.企业信息…

python-leetcode-删除并获得点数

740. 删除并获得点数 - 力扣(LeetCode) 解法 1:动态规划(O(n) 时间,O(n) 空间) class Solution:def deleteAndEarn(self, nums: List[int]) -> int:if not nums:return 0# 统计每个数的贡献points Cou…

助力DeepSeek私有化部署服务:让企业AI落地更简单、更安全

在数字化转型的浪潮中,越来越多的企业选择私有化部署AI技术,以保障数据安全、提升业务效率并实现自主可控。DeepSeek作为行业领先的AI开源技术,其技术可以支持企业私有化部署,企业需要一站式服务私有化部署,涵盖硬件采…

【每天认识一个漏洞】url重定向

🌝博客主页:菜鸟小羊 💖专栏:Linux探索之旅 | 网络安全的神秘世界 | 专接本 | 每天学会一个渗透测试工具 常见应用场景 主要是业务逻辑中需要进行跳转的地方。比如登录处、注册处、访问用户信息、订单信息、加入购物车、分享、收…

纯代码实战--用Deepseek+SQLite+Ollama搭建数据库助手

如何用Python调用本地模型实现DeepSeek提示词模板:一步步教你高效解决13种应用场景 从零到一:纯代码联合PyQt5、Ollama、Deepseek打造简易版智能聊天助手 用外接知识库武装大模型:基于Deepseek、Ollama、LangChain的RAG实战解析 纯代码实战–…

2025 最新版鸿蒙 HarmonyOS 开发工具安装使用指南

为保证 DevEco Studio 正常运行,建议电脑配置满足如下要求: Windows 系统 操作系统:Windows10 64 位、Windows11 64 位内存:16GB 及以上硬盘:100GB 及以上分辨率:1280*800 像素及以上 macOS 系统 操作系统…

AI数字人开发,引领科技新潮流

引言 随着人工智能技术的迅猛发展,AI 数字人在影视娱乐、客户服务、教育及医疗等多个领域展现出巨大的潜力。本文旨在为开发者提供一份详细的 AI 数字人系统开发指南,涵盖从基础架构到实现细节的各个方面,包括人物建模、动作生成、语音交互、…

领域驱动设计:事件溯源架构简介

概述 事件溯源架构通常由3种应用设计模式组成,分别是:事件驱动(Event Driven),事件溯源(Event Source)、CQRS(读写分离)。这三种应用设计模式常见于领域驱动设计(DDD)中,但它们本身是一种应用设计的思想,不仅仅局限于DDD,每一种模式都可以单独拿出来使用。 E…

STM32之影子寄存器

预分频寄存器计数到一半的时候,改变预分频值,此时不会立即生效,会等到计数完成,再从影子寄存器即预分频缓冲器里装载修改的预分频值。 如上图,第一行是内部时钟72M,第二行是时钟使能,高电平启动…

x64汇编下过程参数解析

简介 好久没上博客, 突然发现我的粉丝数变2700了, 真是这几个月涨的粉比我之前好几年的都多, 于是心血来潮来写一篇, 记录一下x64下的调用约定(这里的调用约定只针对windows平台) Windows下的x64程序的调用约定有别于x86下的"stdcall调用约定"以及"cdecl调用约…

Blender调整最佳渲染清晰度

1.渲染采样调高 512 2.根据需要 开启AO ,开启辉光 , 开启 屏幕空间反射 3.调高分辨率 4096x4096 100% 分辨率是清晰度的关键 , 分辨率不高 , 你其他参数调再高都没用 4.世界环境开启体积散射 , 可以增强氛围感 5.三点打光法 放在模型和相机45夹角上 白模 白模带线条 成品

TSMaster【第二十篇:华山论剑——知识图谱全览】

(三维思维导图「独孤九剑总诀式」技能树「经脉贯通」检测系统未来技术「武学秘境」预测) 【武侠场景导入】光明顶秘道惊变 明教光明顶密道中,张无忌面对错综复杂的甬道体系,以乾坤大挪移心法贯通九阳神功与太极拳剑,终成武林至尊。今时今日,三电工程师面对庞杂的TSMaste…

神经性手抖是一种常见的症状

神经性手抖是一种常见的症状,表现为手部无意识或不受控制地颤抖。为了预防神经性手抖,我们可以采取以下几种方法: 1. 放松身心:压力和焦虑是导致神经性手抖的常见原因之一。因此,学会放松身心是预防手抖的关键。可以通…

金融支付行业技术侧重点

1. 合规问题 第三方支付系统的平稳运营,严格遵循《非银行支付机构监督管理条例》的各项条款是基础与前提,其中第十八条的规定堪称重中之重,是支付机构必须牢牢把握的关键准则。 第十八条明确指出,非银行支付机构需构建起必要且独…

支付宝 IoT 设备入门宝典(下)设备经营篇

上篇介绍了支付宝 IoT 设备管理,但除了这些基础功能外,商户还可以利用设备进行一些运营动作,让设备更好的帮助自己,本篇就会以设备经营为中心,介绍常见的设备相关能力和问题解决方案。如果对上篇感兴趣,可以…

mac电脑中使用无线诊断.app查看连接的Wi-Fi带宽

问题 需要检查连接到的Wi-Fi的AP硬件支持的带宽。 步骤 1.按住 Option 键,然后点击屏幕顶部的Wi-Fi图标;2.从下拉菜单中选择 “打开无线诊断”(Open Wireless Diagnostics);3.你可能会看到一个提示窗口,…

企业微信里可以使用的企业内刊制作工具,FLBOOK

如何让员工及时了解公司动态、行业资讯、学习专业知识,并有效沉淀企业文化?一份高质量的企业内刊是不可或缺的。现在让我来教你该怎么制作企业内刊吧 1.登录与上传 访问FLBOOK官网,注册账号后上传排版好的文档 2.选择模板 FLBOOK提供了丰富的…

网络变压器的主要电性参数与测试方法(2)

Hqst盈盛(华强盛)电子导读:网络变压器的主要电性参数与测试方法(2).. 今天我们继续来看看网络变压器的2个主要电性参数与它的测试方法: 1. 线圈间分布电容Cp:线圈间杂散静电容 测试条件:100KHz/0.1…