Elasticsearch 向量搜索的速度比 OpenSearch 快高达 8 倍
作者来自 Elastic Sachin Frayne探索 OpenSearch 与 Elasticsearch 在过滤向量搜索filtered vector search基准测试中的表现差异以及为什么向量搜索性能对上下文工程系统context‑engineered systems至关重要。从向量搜索到强大的 REST APIElasticsearch 为开发者提供了最全面的搜索工具包。你可以在 Elasticsearch Labs 仓库中的示例 notebook 中尝试新功能也可以今天开始免费试用或在本地运行 Elasticsearch。为什么搜索速度对 AI agents 和上下文工程很重要在一个 2000 万文档的语料库基准测试中Elasticsearch 在过滤向量搜索上的吞吐量比 OpenSearch 快高达 8 倍同时在我们测试的各种配置中也实现了更高的 Recall100。上下文工程不仅依赖快速的向量检索。团队还需要强大的相关性控制例如混合搜索和过滤、操作简便性以及可预测的性能以支持工作流的迭代。但因为 agents 往往在每次请求中多次执行 “检索 → 推理 → 再检索” 循环检索延迟会被放大因此在这方面的性能提升会直接转化为更好的端到端响应速度和更低的成本。Graph 1: Throughput.对于上下文工程来说检索不是一次性步骤。Agents 和应用会反复执行循环例如检索 → 推理 → 再检索以精炼查询、验证事实、组装有依据的上下文并完成任务。这种模式在 agentic 工作流和迭代式增强生成retrieval augmented generation - RAG中很常见。由于每个用户请求可能会多次触发检索这会增加响应延迟和/或提高基础设施成本。图 1上下文工程通过反复检索和筛选将庞大的上下文池文档、记忆、工具、聊天记录转化为有限的 LLM 上下文窗口。上下文工程的最佳实现仍是新兴技术不同工作流的迭代次数差异很大。这些基准测试结果最核心的概念是上下文工程具有方向性—— 迭代检索会使延迟成倍增加。为什么向量搜索性能至关重要想象一个购物助手回答问题“我需要一个 60 美元以下、能放 15 英寸笔记本、耐水、并能在周五送达的随身背包。”在生产环境中助手很少只发起一次向量查询就停止。它会运行一个检索循环来构建正确的上下文每一步通常受过滤条件限制例如库存、地区、配送承诺、品牌规则和政策资格。步骤 1理解意图并转换为约束条件Agent 将请求转化为结构化过滤器和语义查询例如Filters过滤条件有库存、可配送至用户邮编、周五前送达、价格低于 60 美元、有效商品Vector query向量查询“Carry-on backpack 15-inch laptop water resistant”步骤 2检索候选项并进一步精炼通常会对检索进行多次变体查询以避免错过优质匹配“travel backpack carry on laptop sleeve”“water resistant commuter backpack 15 inch”“lightweight cabin backpack”每个查询都使用相同的资格过滤器因为检索到不相关或不可用的商品只是浪费上下文。步骤 3扩展以确认细节并降低风险Agent 再次检索以验证影响最终答案的关键属性材质与耐水性描述尺寸和笔记本隔层是否合适退换政策或保修限制库存不足时的备选方案这就是多步骤上下文工程检索 → 推理 → 再检索 → 组装。为什么延迟和召回对上下文工程很重要这些交互可能在每个用户会话中涉及数十次带过滤条件的检索调用。这意味着每次调用的延迟会直接乘到端到端响应时间上而低召回率会导致额外重试或者让 agent 错过符合条件的项从而降低答案质量。要点在上下文工程系统中带过滤条件的近似最近邻ANN搜索不是一次性查询而是在约束下的重复操作。因此向量搜索性能会直接影响延迟、吞吐量和成本即便大语言模型LLM是最直观的组件。基准测试结果在图 2 中每个点代表一种测试配置。最佳结果位于左上角表示更高召回率与更低延迟。Elasticsearch 的结果始终更接近左上角相比 OpenSearch 在相同工作负载下表现出更好的速度和精度。结果图 2召回率与平均延迟对比重排序rescore值为 1一些关键洞察s_n_r_valuesize_numCandidates_rescoreOversample 的缩写在这些测试中 k 和 numCandidates 设置为相等例如100_500_1表示 size100、numCandidates500、k500、rescore oversample1Recall该配置下的Recall100测量值Avg latency (ms)每次查询的平均端到端延迟毫秒Throughput每秒查询数QPSRecall %Elasticsearch 相比 OpenSearch 的相对召回提升计算方式为(Elasticsearch - OpenSearch) / OpenSearchLatency XsOpenSearch 平均延迟除以 Elasticsearch 平均延迟Throughput XsElasticsearch 吞吐量除以 OpenSearch 吞吐量例如在100_9000_1配置下OpenSearch 平均每次检索耗时687 毫秒而 Elasticsearch 仅90 毫秒。在一个 10 步的检索循环中这意味着大约10 × (687 − 90) 5970 毫秒即额外近 6 秒的等待时间。从表中可以看出Elasticsearch 在召回率、延迟和吞吐量上均优于 OpenSearch尤其是在大规模向量检索场景中性能优势会被迭代检索放大直接影响端到端响应时间和系统成本。完整结果可查看表格引擎s_n_r_valueRecall平均延迟 (ms)吞吐量召回 %延迟倍数吞吐倍数Elasticsearch100_250_10.770425534.759.70%2.281.91OpenSearch100_250_10.702357.08279.58———Elasticsearch100_500_10.857725.42524.147.20%2.42OpenSearch100_500_10.800160.9262.12———Elasticsearch100_750_10.894729.67528.095.72%2.252.21OpenSearch100_750_10.846366.76239.11———……………………Elasticsearch100_9000_10.983790.08176.960.16%7.637.61OpenSearch100_9000_10.9821687.2523.25———Elasticsearch100_10000_10.984897.64163.310.08%8.388.36OpenSearch100_10000_10.984818.6419.53———例如在100_9000_1配置下OpenSearch 平均每次检索耗时687 毫秒而 Elasticsearch 仅90 毫秒。在一个 10 步的检索循环中这意味着大约10 × (687 − 90) 5970 毫秒也就是额外近 6 秒的等待时间。从表中可以看到Elasticsearch 在召回率、延迟和吞吐量上均优于 OpenSearch尤其是在大规模向量检索场景中这种优势在迭代检索循环中被放大直接影响端到端响应时间和系统成本。完整测试结果如下引擎s_n_r_valueRecall平均延迟 (ms)吞吐量召回 %延迟倍数吞吐倍数Elasticsearch100_250_10.770425534.759.70%2.281.91OpenSearch100_250_10.702357.08279.58———Elasticsearch100_500_10.857725.42524.147.20%2.42OpenSearch100_500_10.800160.9262.12———Elasticsearch100_750_10.894729.67528.095.72%2.252.21OpenSearch100_750_10.846366.76239.11———Elasticsearch100_1000_10.915629.65534.54.66%2.462.44OpenSearch100_1000_10.874872.88219.01———Elasticsearch100_1500_10.938631.84497.33.38%2.712.68OpenSearch100_1500_10.907986.16185.4———Elasticsearch100_2000_10.950734.69457.22.57%2.982.96OpenSearch100_2000_10.9269103.36154.55———Elasticsearch100_2500_10.958237.9418.431.99%3.283.26OpenSearch100_2500_10.9395124.29128.53———Elasticsearch100_3000_10.963641.86379.41.62%3.463.44OpenSearch100_3000_10.9482144.67110.34———Elasticsearch100_4000_10.970550.28316.211.06%3.873.85OpenSearch100_4000_10.9603194.3682.22———Elasticsearch100_5000_10.974958.77270.910.73%4.434.41OpenSearch100_5000_10.9678260.3361.38———Elasticsearch100_6000_10.978166.75238.590.52%4.914.89OpenSearch100_6000_10.973327.4448.81———Elasticsearch100_7000_10.980474.64213.490.38%5.285.27OpenSearch100_7000_10.9767394.2440.53———Elasticsearch100_8000_10.982382.28193.590.27%6.866.83OpenSearch100_8000_10.9797564.1428.33———Elasticsearch100_9000_10.983790.08176.960.16%7.637.61OpenSearch100_9000_10.9821687.2523.25———Elasticsearch100_10000_10.984897.64163.310.08%8.388.36OpenSearch100_10000_10.984818.6419.53———方法论使用 Python 发送查询并跟踪响应时间和其他统计数据我们向引擎发送了以下查询。请记住任何 vector search 引擎的性能都取决于你如何调优其核心参数考虑多少 candidates、多激进地 rescore以及返回多少 context。这些设置会直接影响 recall找到正确答案的可能性和 latency获取结果的速度。在我们的基准测试中我们使用了在典型 agentic retrieval 循环中会调优的相同 candidate、rescore 和 result-size 设置并测量了 Elasticsearch 在该工作负载下的表现。随后我们用相同设置运行 OpenSearch 作为参考。OpenSearchGET INDEX_NAME/_search { query: { knn: { DENSE_VECTOR_FIELD_NAME: { vector: [...], k: NUMBER_OF_CANDIDATES, method_parameters: { ef_search: NUMBER_OF_CANDIDATES }, rescore: { oversample_factor: OVERSAMPLE }, filter: { SOME_FILTER } } } }, size: RESULT_SIZE, _source: { excludes: [ DENSE_VECTOR_FIELD_NAME ] } }size: RESULT_SIZE返回给 client 的 hits 数量。在本次 benchmark 中result size 为 100 用于计算 Recall100。k: NUMBER_OF_CANDIDATESnearest neighbor candidates 的数量。ef_search: NUMBER_OF_CANDIDATES要检查的 vectors 数量。oversample_factor: 在 rescore 之前检索多少 candidate vectors。ElasticsearchGET INDEX_NAME/_search { query: { knn: { field: DENSE_VECTOR_FIELD_NAME, query_vector: [...], k: NUMBER_OF_CANDIDATES, num_candidates: NUMBER_OF_CANDIDATES, rescore_vector: { oversample: OVERSAMPLE }, filter: { SOME_FILTER } } }, size: RESULT_SIZE, _source: { excludes: [ DENSE_VECTOR_FIELD_NAME ] } }size: RESULT_SIZE返回给 client 的 hits 数量。在本次 benchmark 中result size 为 100 用于计算 Recall100。k: NUMBER_OF_CANDIDATES每个 shard 返回的 nearest neighbors 数量。num_candidates: NUMBER_OF_CANDIDATES在每个 shard 执行 knn search 时要考虑的 nearest neighbor candidates 数量。oversample: 在 rescore 之前检索多少 candidate vectors。示例Knn query(100_500_1) 如下OpenSearchGET search_catalog_128/_search { query: { knn: { search_catalog_embedding: { vector: [...], k: 500, method_parameters: { ef_search: 500 }, rescore: { oversample_factor: 1 }, filter: { term: { valid: true } } } } }, size: 100, _source: { excludes: [ search_catalog_embedding ] } }ElasticsearchGET search_catalog_128/_search { query: { knn: { field: search_catalog_embedding, query_vector: [...], k: 500, num_candidates: 500, rescore_vector: { oversample: 1 }, filter: { term: { valid: true } } } }, size: 100, _source: { excludes: [ search_catalog_embedding ] } }完整配置以及 Terraform 脚本、Kubernetes manifests 和 benchmark 代码可在该 repository 的 es-9.3-vs-os-3.5-vector-search 文件夹中找到。集群设置我们的测试运行在六台 e2-standard-16 cloud servers 上每台有 16 vCPUs 和 64 GB RAM。在每台服务器上我们为运行 search engine 节点的每个 Kubernetes pod 分配了 15 vCPUs 和 56 GB RAM其中 28 GB 预留给 JVM heap。集群运行 Elasticsearch 9.3.0 和 OpenSearch 3.5.0Lucene 10.3.2。由于在本 benchmark 中两者都使用相同的 Lucene 版本因此我们观察到的 throughput 和 latency 差异不能仅归因于 Lucene而是反映了每个 engine 在执行 filtered k-nearest neighbor (kNN) retrieval 和 rescore 时的集成和执行差异。我们使用了单个 index包含三个 primary shards 和一个 replica总共 6 个 shards每个节点 1 个。我们还使用同一区域的另一台服务器运行 benchmark client 并收集 timing 统计数据。图 2集群设置示意图。数据集在本次基准测试中我们使用了一个大型电商风格目录 embedding 数据集包含 2000 万条文档旨在反映大规模过滤向量检索的实际情况。每条文档代表一个目录项并包括一个 128 维的 dense vector embedding用于近似 kNN 检索。用于过滤的结构化 metadata 字段例如商品有效性和可用性以及其他目录约束支持常见的生产模式检索最近邻时仅在符合条件的子集内进行。我们选择此数据集是因为它捕捉了在 agentic 和 RAG 风格系统中常见的核心性能挑战仅向量相似性不足检索经常受过滤条件约束系统必须在这些约束下保持高 recall 并降低 latency。相比较小的 QA 风格数据集2000 万条文档的语料更能反映过滤 ANN 系统在实际中面临的规模和候选压力。结论在现代 AI 架构中尤其是基于 context engineering 的系统vector search 速度不是一个小细节。它是一个乘数。当 agents 和 workflows 多次执行 retrieve → reason → retrieve 循环时检索性能直接影响端到端 latency、throughput以及输入模型的 context 质量。在我们的基准测试中Elasticsearch 在依赖正确文档检索而不仅仅是相似向量的场景中一直比 OpenSearch 提供更高的 recall 和更低的 latency。在受控数据集上这种差异很明显在生产环境中这些性能提升会在大量检索调用中累积提高响应速度、增加容量余量并降低基础设施成本。进一步阅读什么是 context engineeringhybrid search 和 context engineering 的演变relevance 在 AI agents context engineering 中的影响原文https://www.elastic.co/search-labs/blog/context-engineering-relevance-ai-agents-elasticsearch

相关新闻

政策红利+百万缺口!网络安全领跑2026IT转行六大榜单,附学习路径全景图

政策红利+百万缺口!网络安全领跑2026IT转行六大榜单,附学习路径全景图

文章目录 前言 1、强大的网络设计能力2、扎实的排障能力3、自我学习能力4、强大的动手能力 如何入门学习网络安全【黑客】 【----帮助网安学习,以下所有学习资料文末免费领取!----】 大纲学习教程面试刷题 资料领取 前言 网络安全工程师是一个各行各业…

2026/5/17 6:55:48 阅读更多 →
自由职业个人服务数字宣传手册,手册点开就能看。

自由职业个人服务数字宣传手册,手册点开就能看。

自由职业个人服务数字宣传手册 一、实际应用场景描述 场景:自由职业者小林是一名UI/UX设计师,同时提供品牌策划、插画设计、动效设计等多维服务。他每天都会收到大量咨询,但传统方式存在诸多问题: - 客户问"你能做什么&#…

2026/7/3 0:54:48 阅读更多 →
收藏!小白程序员入门大模型必备:从Transformer到RAG面试全解析

收藏!小白程序员入门大模型必备:从Transformer到RAG面试全解析

本文汇总了从事大语言模型、知识库、搜索增强生成(RAG)研发、产品和测试的同学在面试中遇到的问题,涵盖大模型训练过程、Transformer模型机制、注意力机制、模型架构、微调技术、量化方法、推理优化等核心知识点。同时,也探讨了RA…

2026/5/17 6:55:46 阅读更多 →

最新新闻

数据迁移双写校验:两边都写成功,不代表数据一致

数据迁移双写校验:两边都写成功,不代表数据一致

数据迁移双写校验:两边都写成功,不代表数据一致 大规模数据迁移中,双写是常见过渡方案。旧库写一份,新库写一份,等校验通过后切流。听起来稳,但双写成功不等于数据一致。写入顺序、重试、幂等、字段转换、异…

2026/7/3 16:59:37 阅读更多 →
《Vue3 从入门到大神20篇》环境变量与跨域处理 —— Vite 的配置秘籍

《Vue3 从入门到大神20篇》环境变量与跨域处理 —— Vite 的配置秘籍

前言在本地开发时,你的接口请求可能是这样的:axios.get(http://192.168.1.100:8080/api/users)但部署到生产环境后,后端地址变成了:https://api.example.com/api/users如果你把 IP 和端口硬编码在代码里,那每次部署都要…

2026/7/3 16:57:36 阅读更多 →
PIC18F85K22驱动WS2812实现动态光效系统

PIC18F85K22驱动WS2812实现动态光效系统

1. 项目概述:用WS2812与PIC18F85K22打造动态光效系统这个项目本质上是通过PIC18F85K22单片机驱动WS2812智能LED灯带,实现可编程的动态光效。WS2812作为集成了控制电路的三原色LED,每个像素点都能独立显示1600万种颜色,而PIC18F85K…

2026/7/3 16:50:52 阅读更多 →
SQL注入漏洞复现:从原理到实战,以红帆iOffice.net为例

SQL注入漏洞复现:从原理到实战,以红帆iOffice.net为例

1. 项目概述:一次典型的SQL注入漏洞复现之旅最近在整理内部安全审计的案例库,翻到了一个挺有意思的案例,是关于红帆iOffice.net办公系统的。这个系统在不少企事业单位里都有部署,算是比较常见。当时我们通过常规的资产梳理和漏洞扫…

2026/7/3 16:48:42 阅读更多 →
AI智能体与本地大模型集成:Hermes+Codex自动化工作流部署指南

AI智能体与本地大模型集成:Hermes+Codex自动化工作流部署指南

🚀 30款热门AI模型一站整合,DeepSeek/GLM/Claude 随心用,限时 5 折。 👉 点击领海量免费额度 1. 先搞清楚 Hermes 和 Codex 到底是什么,以及它们能一起做什么 看到“赛博牛马连续工作11小时”这个标题,…

2026/7/3 16:46:39 阅读更多 →
STM32L152ZD与MC74HC165A的工业级开关量采集方案

STM32L152ZD与MC74HC165A的工业级开关量采集方案

1. 为什么需要MC74HC165A与STM32L152ZD的组合 在工业控制和嵌入式系统设计中,我们经常遇到需要监控大量开关量信号的场景。传统做法是为每个输入信号分配一个GPIO引脚,这在8位或16位MCU时代会迅速耗尽宝贵的引脚资源。MC74HC165A这款8位并行输入/串行输出…

2026/7/3 16:42:38 阅读更多 →

日新闻

Nginx防御TLS重协商攻击实战:从原理到配置与监控

Nginx防御TLS重协商攻击实战:从原理到配置与监控

1. 项目概述:为什么TLS重协商攻击至今仍需警惕十多年前的CVE-2011-1473,一个关于TLS/SSL协议重协商机制的漏洞,现在提起来还有必要吗?很多运维和开发朋友可能会觉得,这都老掉牙了,现代服务器和客户端不都默…

2026/7/3 0:03:59 阅读更多 →
华为防火墙双通道远程管理实战:Web与SSH配置详解

华为防火墙双通道远程管理实战:Web与SSH配置详解

1. 项目概述:为什么需要双通道远程管理防火墙?在任何一个稍具规模的企业网络里,防火墙都是那个默默守护在边界的关键角色。作为网络工程师,我们不可能每次都跑到机房,插上console线去配置它。远程管理能力,…

2026/7/3 0:03:59 阅读更多 →
AD74413R与PIC18F65K40的高精度工业数据采集方案

AD74413R与PIC18F65K40的高精度工业数据采集方案

1. 项目概述:AD74413R与PIC18F65K40的协同工作在工业自动化和精密测量领域,同时实现高精度模数转换(ADC)和数模转换(DAC)功能是许多复杂系统的核心需求。AD74413R作为一款四通道可配置模拟输入/输出器件,与PIC18F65K40微控制器的组合&#xf…

2026/7/3 0:05:59 阅读更多 →

周新闻

月新闻