拆解 “ES 已死“ 伪命题:Agentic RAG 时代搜索引擎的终极形态

news2025/3/17 17:37:53

作者:来自 Elastic 李捷

xxx:“ES已死,#¥%@#¥……¥
我:???

最近,某厂商发了一堆公关文章,翻来覆去地炒作 “ES 已死”,“放弃 ES”。这哪是什么正经的技术文章,说白了就是一场算计好的认知陷阱,妥妥的恶意误导。除了把用户带偏,对开源社区来说,有点开创了社区恶意流的先河,吃相难看。咱也犯不着在这没意义的事儿上浪费时间争论,咱直接聚焦到关键问题上:现在 Agentic RAG 都在重塑人机交互模式了,那下一代智能引擎的理想标准到底是啥样?

观点直接抛出,在如今 AI 搜索,也就是 RAG 应用的时代,Elasticsearch 绝对是首选之一。为啥这么说呢?下面这几个原因,我觉得特别关键 。

  • 查询手段丰富:集全文、稀疏向量、密集向量检索于一体,配备丰富查询 DSL。附录对比 [1]
  • 语义处理强大:具备文本分析、实体提取等丰富语义理解和数据处理功能,契合 RAG 应用需求。
  • 大模型对齐:互联网广泛存在的 ES 训练知识,使得大模型的均能写出高效准确的 ES 查询和聚合语句
  • RAG 闭环完整:涵盖索引、检索等业务闭环,以及集成、测试等产研闭环。

而如果我们真正关注 RAG 的实际应用场景和业务痛点,那么 Agentic RAG 必然是 RAG 的发展趋势。传统 RAG 已无法满足用户期望,局限性显著。在许多所谓的 RAG 教程中,例子多是解决简单查询问题,再让大模型总结,比如 “鲁迅说没说”。其局限在于,文档片段中必须有答案。但当问题复杂些,如 “公司本年度财报中,营收最优的一个季度和最差一个季度的数据有哪些不同?” 即便数据库中有该公司所有季度财务报告,向量库也难以提取相关信息(因为最优和最差是计算和排序的结果,并非简单查询可得)。抽象来讲,这种局限性大概就是 Search 和 Query 的区别。搜索(search)更多是检索过程,只能从知识库中找相关片段作为上下文生成内容;而 Query 更多是提问过程,回答问题需要理解问题意图,拆分任务,不仅要检索,还需计算、推理。因此,在 Agentic RAG 的架构中,我们需要的是像 ES 这样强大的集检索、计算与处理于一体的工具集引擎,而非简单的向量数据库。

因此,本文将分别从传统 RAG 和 Agentic RAG 两个场景探讨,为何 ES 仍是你最优先的选择之一。

现在 ES 适合于传统 RAG 吗?

首先一个问题,现在 ES 适合于传统 RAG 吗?

答案是肯定的。大多数反对声音往往带有故意的误导、偏见,甚至恶意。

这种误导极为隐性。比如过分强调单次运算的延迟。实际上,RAG 是精细活,多数需要部署 RAG 应用的场景,无论是问答系统、客服聊天机器人,还是语义化的文档检索,都需要理解查询语境和意图。真正的核心指标是准确理解查询意图,找出最相关的上下文信息,再由大模型给出最合适的回答。

由于 token 生成速度限制,一次问答通常需几秒,甚至十几秒钟。这一延迟在大多数应用场景中是可接受的。相较于最终整体效果的优化,纠结过程中向量查询是 20ms 还是 5ms 的延迟毫无意义。同理,写入吞吐和单机成本方面,ES 一个节点通常能承载 2 - 4TB 的数据量,而在传统 RAG 场景中,知识库规模具有显著的长尾特征 —— 80%的企业知识库小于 1TB。

因此,向量查询引擎的单机成本和写入吞吐并非构建 RAG 系统的瓶颈,也不是需重点考量的指标。更不用说,最新版的 ES 提供了最先进的 HNSW 索引,以及目前业内唯一 BBQ 量化,BBQ(Better Binary Quantization) 是 Lucene 和 Elasticsearch 在向量量化方面的一次飞跃,它将 float32 维度缩减为位,在保持高排名质量的同时,内存使用量减少了约 95%。BBQ 在索引速度(量化时间缩短 20-30 倍)、查询速度(查询速度提高 2-5 倍)方面均优于产品量化 (PQ) 等传统方法,同时准确度没有额外损失,已大幅降低了 ES 向量查询对计算资源的消耗

那可能有人要问,如果要构建一个 RAG 系统,在选择知识库检索引擎时,应主要从哪些方面考虑?核心指标当然是从最终用户的需求反推。有没有效果(即找出来的知识片段是否准确,提供给大模型的上下文是否是最相关的片段)是第一体验,大体可从以下几个方面考虑:

  • 增强对用户意图的理解:目前普遍通过更多处理(而不仅是密集向量的 embedding)来理解用户意图,包括但不限于:查询重写、拼写校正、关键词提取、查询扩展和放宽、查询解析、查询管道化、实体提取和词性标注。多数引擎只能提供部分基础能力,如向量转换和基础分词,而 ES 提供了全部能力。我们可通过 ES 上各种定制化分词器、部署的 NLP 小模型,以及通过推理接口对接的大模型来实现这些处理。或许有人会问,对于 query 的处理,大部分逻辑可放在检索引擎之外,由其他模块实现。这点不反对,虽增加了系统复杂性和成本(一个具备同等能力的多系统拼接方案,其隐性成本(数据一致性维护、多团队协作开销)往往是直接成本的 3-5 倍),但也提升了灵活性。然而,目前观察到理解用户意图最有效的做法(不一定成本最优)是通过大模型做前置的用户意图理解,即通过大模型进行查询转换或者查询重写。此时,ES 的核心优势尽显,因为 ES 丰富的文档和大量的社区资源已作为训练知识对齐到大模型当中,使得 LLM 无需 fine tuning 就能将理解后的用户意图翻译为准确的、可用的 ES DSL 语句;其次,意图理解后的查询拆分可能很复杂,而 DSL 提供了功能丰富且强大的混合查询,甚至聚合计算选项,使得 ES 最能匹配复杂的查询场景乃至计算场景。因此,ES 是 Query Transformation & Expansion 的最优选择。

  • 增强对知识库数据的整理,使其更符合 RAG 的应用场景:这不是简单的 embedding,而是需要对知识库数据进行更深层次的处理,包括但不限于:
    • 知识库的结构化(如 chunking)

    • 知识库的语义化 (分词,稀疏向量转化,密集向量转化)

    • 知识库的关联化(meta 数据丰富)

    • 知识库的扩展化(如大模型的总结)

    • 知识库的实体化

    • 知识库的标准化。

这些处理通常需要大量的 ETL 工作以及完善的知识库引擎才能承载。实际上ES提供了包括 NLP 处理在内的丰富的数据处理功能,自然也能满足这种场景的数据存储和治理需求。

这里有几个功能分享给大家:

  • ES 提供了一个新的 semantic_text 字段类型,会对该字段的数据进行自动 chunk 和 embedding;

  • ES 支持 nested vector search,以更好地适应返回整个文档的检索需求,而非仅返回 chunk 的片段;

  • ES 领先其他厂商十几个月,在 2023 年就提供了业界第一个稀疏向量的词扩展模型 ELSER [2] ,使用 Elastic 的 ELSER 与 BM25 相结合的混合搜索优于SPLADE、ColBERT 和 OpenAI 提供的高端嵌入模型,并且即将支持多语言。

词扩展模型,而非简单的稀疏向量

  • ES 提供的推理 processor,可在数据写入过程中,通过绑定对应 processor 的 ingest pipeline 对数据进行处理,如实体提取、关键词提取、实体标注、词性标注等等。这些处理可在数据写入时完成,减少查询时的处理时间。

  • 查询和排名优化:这是 ES 的强项,ES 提供了:

    • 最丰富的查询 DSL;

    • 统一数据结构内的混合查询选项;

    • 并且提供了大多数模型所不具备的多个 Rerank 选项,帮助优化大模型上下文的相关性:

      • 基于排名的多路融合的 RRF;

      • 基于大模型语义理解的 semantic rerank;

      • 基于用户反馈统计的 LTR rerank。

我们在此不一一赘述 ES 的功能,但如果你希望武器库里有更多选择(无论选择全文检索、向量搜索还是混合搜索),那么 ES 仍然是你最优先的选择。

Agentic RAG 需要一个什么样的引擎?

从上述分析不难看出,要突破传统 RAG 的局限,我们需要的是一个具备认知能力的智能引擎,而非简单的检索工具。这种引擎需要支持 “隐性意图理解” 甚至 “推理意图拆解”,而不仅仅是显性的关键词匹配。

  • 若需求停留在 “直接检索显性事实”(如从产品文档中查找 “设备重置按钮位置”),传统 RAG 通过向量搜索 + 大模型总结即可实现。

  • 但面对 “隐性事实推理”(如 “分析本季销售额暴跌是否与服务器宕机事件相关”),问题会触发复杂的认知链条:

    1. 意图拆解:需识别 “销售额暴跌” 的时间范围、统计口径,“服务器宕机” 的事件定位

    2. 多模态检索:同时查询财报文档(文本)、运维日志(时序数据)、客服工单(非结构化对话)

    3. 关联推理:通过 ES|QL 计算销售额与服务器可用性的时序相关性系数

    4. 决策生成:结合企业风险管理手册生成应对方案

这正是 Agentic RAG 的革命性之处——它将传统 RAG 进化为 “认知增强框架”,融合了:

  • ChatBI:用自然语言完成多维分析(“对比华北/华南区域在故障期间的订单流失率”)

  • ChatETL:动态构建数据管道(“提取过去三个月所有提及 ‘延迟’ 的客服录音,按情绪值排序”)

  • 认知闭环:检索结果实时反馈至监控系统,触发自动化预案

而 Elasticsearch 之所以能成为 Agentic RAG 的终极引擎,关键在于其 “三位一体” 架构

能力维度

技术实现

场景案例

多模态融合

原生支持文本/向量/数值/地理/日志等20+数据类型,支持嵌套文档和跨索引关联

在一次查询中同时分析产品手册(文本)、用户行为埋点(JSON)、服务器监控指标(时序数据)

认知计算

ESQL 提供类自然语言的混合计算能力(FROM logs | STATS avg=AVG(latency) BY region | EVAL risk=CASE(...)

自动推导“季度营收异常”与“广告投放时段”的空间相关性

生态扩展

无缝集成 LogsDB(分析PB级日志)、MetricDB(实时指标聚合)、APM(应用性能数据)

安全分析场景:
1. 检索美国IP访问日志
2. 关联历史攻击特征库
3. 调用风险评分模型
4. 自动阻断高危IP

有关 Agentic RAG 的更多阅读,请参阅:

  • 超越向量:带 Agents 的智能混合搜索

  • Agentic RAG 详解 - 从头开始​​构建你自己的智能体系统

真实 Agentic RAG 场景(更易理解的日常多任务问题)

用户提问
“帮我规划一个上海三日游,预算 5000元,要包含迪士尼、外滩夜景,还要避开人多的网红餐厅。”


阶段一:意图解析与任务拆解

LLM 将原始查询拆解为以下可执行任务:

  1. 核心需求提取

    • 时间范围:3天

    • 预算限制:5000元(需拆分交通、住宿、门票、餐饮)

    • 必去景点:迪士尼、外滩夜景

    • 附加条件:餐厅避开高人流时段

  2. 生成结构化查询计划

阶段二:多模态数据收割

ES 同步检索以下数据源,无需跨系统跳转:

数据类型

索引类型

检索策略示例

景点信息

文本+向量

混合搜索

:迪士尼门票价格(关键词)+ "适合家庭游玩"(语义向量)

交通路线

地理+时序

geo_shape

 查询地铁线路 + date_histogram 分析早高峰拥堵时段

餐厅评价

嵌套文档

嵌套聚合:统计“排队时长”中位数 + 过滤“网红”标签(terms_exclude

酒店价格

数值+文本

range

 过滤价格区间 + match_phrase 匹配“免费接送迪士尼”

ES 多任务查询示例

(也可以用 DSL 查询)

阶段三:动态决策生成

LLM 根据 ES 多种任务的查询与计算结果,自动输出结构化方案并实时验证预算:

为什么选择 ES 而非传统方案?

  • 传统方案:需串联旅游平台 API + 地图服务 + 餐饮点评数据库 + Excel 手动计算

  • ES 方案:单引擎完成语义理解 → 多点查询 → 动态计算,响应时间从分钟级压缩到秒级

  • 杀手锏功能:实现完整业务闭环,甚至是可视化图表,都可以通过 Kibana 零代码配置完成

具体 ES 实现 Agentic RAG 的用例,可以参考下面的视频:

Elastic AI 助手介绍

总结

综上所述,无论是传统 RAG 场景,还是代表未来趋势的 Agentic RAG 场景,Elasticsearch 凭借其丰富的功能、强大的处理能力以及完整的闭环体系,都将是技术选型时不容忽视的择优选项。那些宣扬 “ES已死” 的言论,纯粹就是瞎扯。其实开源社区真没必要天天想着怎么攻击别人,也别总想着用一些歪门邪道去误导用户。真想让这个行业进步,应该是一起把蛋糕做大,让更多的使用场景从传统的文本检索上进行迁移。

我真心希望以后能看到更多厉害的技术突破,大家一起把 AI Search 技术往前推,给用户带来更方便、更智能的搜索和问答体验,也帮企业多赚点钱。技术这东西,本来就是要服务社会的,让咱们的生活和工作变得更好。

附录

功能描述

Elasticsearch大多数其他引擎
Full Text Search (全文搜索)

✔(全文搜索,文本匹配)

x

ANN Search (近似最近邻搜索)

✔(HNSW,int8/4、BBQ 量化)

✔(ANN,基于向量的相似度)

kNN Search (k近邻搜索)

✔(kNN暴力搜索)

✔(ANN 向量检索)

Text Analysis (文本分析)

✔(内置文本分析器,分词器)

x

Semantic Search (语义搜索)

✔(基于文本和稀疏向量的语义搜索)

?(基础支持,缺少复杂语义分析)

Querying (查询功能)

✔ 超过 30 种查询(查询DSL,支持复杂查询构造、多个匹配模式、嵌套查询、组合字段查询、模糊匹配、加权查询、高亮显示)

✔ 平均3 种 (简单查询,支持基本运算)

Filtering (过滤功能)

✔(多种过滤方式)

✔(基于属性和向量过滤)

Aggregations (聚合分析)

✔ 超过 20 种聚合算子(聚合查询,数据统计)

x

Range Search (范围查询)

✔(范围查询)

✔(支持向量范围查询)

Sorting (排序)

✔(排序功能)

?

Retrieval Augmented Generation (RAG)

✔(支持RAG,检索增强生成)

x

Reranking (重排名)

✔(基于语义和统计的重排序)

x

Search with Synonyms (同义词搜索)

✔(同义词支持)

x

Query Templates (查询模板)

✔(支持查询模板)

x

SQL-like Queries (SQL查询)

✔(支持ESQL和SQL查询)

x

Cross-cluster Search (跨集群搜索)

✔(支持跨集群搜索)

x

Geospatial Analysis (地理空间分析)

✔(地理空间查询和聚合)

x

Retrieving Selected Fields (字段选择)

✔(指定字段检索)

✔(返回指定向量)

Search Analytics (搜索分析)

✔(搜索统计与分析)

x

Scripting (脚本支持)

✔(支持自定义脚本)

x

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

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

相关文章

.net 6程序在IIS中部署后点击IIS设置报错“执行此操作时出错”

.net 6写的程序,需要在Windows服务器的IIS中部署,由于是刚装的系统,先安装.net 6运行时,装了才发现没有IIS,于是又通过“添加角色和功能”添加与IIS相关的功能。安装完毕后,在IIS中添加网站,并将…

《从零手写Linux Shell:详解进程控制、环境变量与内建命令实现 --- 持续更新》

承接上文Linux 进程的创建、终止、等待与程序替换保姆级讲解-CSDN博客,涉及所用到的代码,本文所绑定的资源就是上篇文章的主要代码。 完整代码在文章末尾 目录 1.实现编写代码输出一个命令行 a.如何获取自己的用户名,主机名,路径…

k8s环境部署

四台机器 分别是 k8s-master:172.25.254.100 k8s-node1:172.25.254.10 k8s-node2:172.25.254.20 docker-harbor:172.25.254.200 reg.timinglee.org 四台机器分别配置好网络和软件仓库 做好地址解析 scp -r /etc/hosts/ root17…

CentOS 系统安装 docker 以及常用插件

博主用的的是WindTerm软件链接的服务器,因为好用 1.链接上服务器登入后,在/root/目录下 2.执行以下命令安装docker sudo yum install -y yum-utilssudo yum-config-manager \--add-repo \https://download.docker.com/linux/centos/docker-ce.reposudo…

谷歌云服务器:服务器怎么安装???

谷歌云服务器:服务器怎么安装??? 以下是详细分步指南,帮助你在 Google Cloud Platform (GCP) 上快速创建并配置云服务器(Compute Engine 实例),并安装所需环境: 一、准备…

Redis--Zset类型

目录 一、引言 二、介绍 三、命令 1.zadd 2.zrange,zrevrange,zrangebyscore 3.zcard,zcount 4.zpopmax,bzpopmax,zpopmin,bzpopmin 5.zrank,zrevrank,zscore 6.zrem,zremrangebyrank&a…

《阿里云Data+AI:开启数据智能新时代》电子书上线啦!

本书整理了阿里云在DataAI领域的最新实践案例与深度洞察,涵盖电商、游戏、营销、数字内容等多个行业的成功经验,以及技术专家对数据库与AI融合趋势的专业解读。 通过理论与实践的结合,我们将共同探索DataAI如何成为企业智能化转型的核心驱动…

Golang编译器DIY,手搓 if err != nil { return err } 语法糖

前序 在go的社区里,下面这三行代码是被吐槽的最多的 if err ! nil {return err }从代码之整洁美观的角度看,这样的写法也是让人不舒服的。尤其是 当有很多错误需要处理的时候,就会发现通篇都是这三行。 所以想着看看修改一下编译器&#xf…

图解多头注意力机制:维度变化一镜到底

目录 一、多头注意力机制概述二、代码实现1. pyTorch 实现2. tensorFlow实现 三、维度变化全流程详解1. 参数设定2. 维度变化流程图3. 关键步骤维度变化 四、关键实现细节解析1. 多头拆分与合并2. 注意力分数计算3. 掩码处理技巧 五、完整运行示例六、总结与常见问题1. 核心优势…

[ISP] 人眼中的颜色

相机是如何记录颜色的,又是如何被显示器还原的? 相机通过记录RGB数值然后显示器显示RGB数值来实现颜色的记录和呈现。道理是这么个道理,但实际上各厂家生产的相机对光的响应各不相同,并且不同厂家显示器对三原色的显示也天差地别&…

解锁MySQL 8.0.41源码调试:Mac 11.6+CLion 2024.3.4实战指南

文章目录 解锁MySQL 8.0.41源码调试:Mac 11.6CLion 2024.3.4实战指南前期准备环境搭建详细步骤安装 CLion安装 CMake 3.30.5准备 MySQL 8.0.41 源码配置 CMake 选项构建 MySQL 项目 调试环境配置与验证配置 LLDB 调试器启动调试验证调试环境 总结与拓展 解锁MySQL 8…

关于xcode Project navigator/项目导航栏的一些说明

本文基于 xcode12.4 版本做说明 首先要明确一点,导航栏这里展示的并不是当前工程在电脑硬盘中的文件结构,它展示的是xxxxxx.xcodeproj/project.pbxproj文件(后文简.pbxproj文件)中的内容。我们在导航栏中的操作就是修改该文件,有些操作会修…

深度解析扣减系统设计:从架构到实践

背景 在当今数字化业务蓬勃发展的时代,扣减系统在众多业务场景中扮演着关键角色。无论是电商平台的库存扣减,还是金融领域的资金扣减、积分系统的积分扣减,一个高效、可靠且数据一致的扣减系统都是业务稳健运行的基石。本文将深入探讨扣减系…

视觉定位项目中可以任意修改拍照点位吗?

修改拍照点位不是那么简单 1. 背景2. 修改拍照点位意味着什么?3. 如何解决这个问题? 1. 背景 在视觉定位的项目中,会遇到这么一种情况:完成三步(9点标定,旋转中心标定,示教基准)之…

深度学习常用操作笔记

深度学习常用操作笔记 指令报错cannot import name Config from mmcvImportError: cannot import name print_log from mmcvImportError: cannot import name init_dist from mmengine.runnerWARNING: Retrying (Retry(total4, connectNone, readNone, redirectNone, statusNon…

C++学习内存管理

1.概念的介绍 总括: 1. 栈(Stack) 存储内容: 局部变量(包括函数参数、非静态局部变量)。 函数调用的上下文信息(如返回地址、寄存器状态等)。 特点: 内存由编译器自动…

git使用。创建仓库,拉取分支,新建分支开发

文章目录 安装 git自己新建仓库,进行代码管理合作开发的流程拉去主分支代码查看本地分支的状态查看远程分支查看远程的仓库信息本地分支切换切换并创建分支提交代码 made by NJITZX git 是一个版本控制工具,真正开发项目中是多个人开发一个项目的&#…

itsdangerous加解密源码分析|BUG汇总

这是我这两天的思考 早知道密码学的课就不旷那么多了 纯个人见解 如需转载,标记出处 目录 一、官网介绍 二、事例代码 源码分析: 加密函数dump源码使用的函数如下: 解密 ​编辑 ​编辑 关于签名: 为什么这个数字签名没有…

不像人做的题————十四届蓝桥杯省赛真题解析(上)A,B,C,D题解析

题目A:日期统计 思路分析: 本题的题目比较繁琐,我们采用暴力加DFS剪枝的方式去做,我们在DFS中按照8位日期的每一个位的要求进行初步剪枝找出所有的八位子串,但是还是会存在19月的情况,为此还需要在CHECK函数…

JavaScript 中 call 和 apply 的用法与区别

文章目录 前言一、 call 方法1.1 基本用法1.2 传递多个参数 二、apply 方法2.1 基本用法2.2 传递数组参数 三、call 和 apply 的区别四、实际应用场景4.1 借用方法4.2 继承与构造函数 五、总结 前言 在 JavaScript 中,call 和 apply 是两个非常重要的函数方法&…