最近,某厂商发了一堆公关文章,翻来覆去地炒作 “ES 已死”,“放弃 ES”。这哪是什么正经的技术文章,说白了就是一场算计好的认知陷阱,妥妥的恶意误导。除了把用户带偏,对开源社区来说,有点开创了社区恶意流的先河,吃相难看。咱也犯不着在这没意义的事儿上浪费时间争论,咱直接聚焦到关键问题上:现在 Agentic RAG 都在重塑人机交互模式了,那下一代智能引擎的理想标准到底是啥样?
观点直接抛出,在如今 AI 搜索,也就是 RAG 应用的时代,Elasticsearch 绝对是首选之一。为啥这么说呢?下面这几个原因,我觉得特别关键 。
而如果我们真正关注RAG的实际应用场景和业务痛点,那么Agentic RAG必然是RAG的发展趋势。传统RAG已无法满足用户期望,局限性显著。在许多所谓的RAG教程中,例子多是解决简单查询问题,再让大模型总结,比如“鲁迅说没说”。其局限在于,文档片段中必须有答案。但当问题复杂些,如“公司本年度财报中,营收最优的一个季度和最差一个季度的数据有哪些不同?”即便数据库中有该公司所有季度财务报告,向量库也难以提取相关信息(因为最优和最差是计算和排序的结果,并非简单查询可得)。抽象来讲,这种局限性大概就是Search和Query的区别。搜索(search)更多是检索过程,只能从知识库中找相关片段作为上下文生成内容;而Query更多是提问过程,回答问题需要理解问题意图,拆分任务,不仅要检索,还需计算、推理。因此,在Agentic RAG的架构中,我们需要的是像ES这样强大的集检索、计算与处理于一体的工具集引擎,而非简单的向量数据库。
因此,本文将分别从传统RAG和Agentic RAG两个场景探讨,为何ES仍是你最优先的选择之一。
首先一个问题,现在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系统,在选择知识库检索引擎时,应主要从哪些方面考虑?核心指标当然是从最终用户的需求反推。有没有效果(即找出来的知识片段是否准确,提供给大模型的上下文是否是最相关的片段)是第一体验,大体可从以下几个方面考虑:
。
这些处理通常需要大量的ETL工作以及完善的知识库引擎才能承载。实际上ES提供了包括 NLP 处理在内的丰富的数据处理功能,自然也能满足这种场景的数据存储和治理需求。
这里有几个功能分享给大家:
semantic_text
字段类型,会对该字段的数据进行自动chunk和embedding;词扩展模型,而非简单的稀疏向量;
我们在此不一一赘述ES的功能,但如果你希望武器库里有更多选择(无论选择全文检索、向量搜索还是混合搜索),那么ES仍然是你最优先的选择。
从上述分析不难看出,要突破传统 RAG 的局限,我们需要的是一个具备认知能力的智能引擎,而非简单的检索工具。这种引擎需要支持 “隐性意图理解” 甚至 “推理意图拆解”,而不仅仅是显性的关键词匹配。
这正是 Agentic RAG 的革命性之处——它将传统 RAG 进化为 “认知增强框架”,融合了:
而 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 |
用户提问: “帮我规划一个上海三日游,预算5000元,要包含迪士尼、外滩夜景,还要避开人多的网红餐厅。”
LLM 将原始查询拆解为以下可执行任务:
1. 核心需求提取:
2. 生成结构化查询计划:
"agent_plan": {
"tasks": [
{"type": "景点门票查询", "keywords": ["上海迪士尼票价", "外滩观景台开放时间"]},
{"type": "交通分析", "params": {"出发地": "用户定位", "目的地": "迪士尼+外滩"}},
{"type": "餐厅推荐", "filters": ["评价>4分", "人均<200元", "排队时长<30分钟"]},
{"type": "动态预算分配", "constraints": "总费用≤5000元"}
]
}
ES 同步检索以下数据源,无需跨系统跳转:
数据类型 | 索引类型 | 检索策略示例 |
---|---|---|
景点信息 | 文本+向量 | 混合搜索:迪士尼门票价格(关键词)+ "适合家庭游玩"(语义向量) |
交通路线 | 地理+时序 | geo_shape 查询地铁线路 + date_histogram 分析早高峰拥堵时段 |
餐厅评价 | 嵌套文档 | 嵌套聚合:统计“排队时长”中位数 + 过滤“网红”标签(terms_exclude) |
酒店价格 | 数值+文本 | range 过滤价格区间 + match_phrase 匹配“免费接送迪士尼” |
ES 多任务查询示例:
// 景点与交通联动查询
FROM attractions
| WHERE name == "迪士尼" OR name == "外滩"
| STATS
avg_price = AVG(ticket_price),
nearby_transport = COUNT(transport_hubs)
// 实时餐厅动态过滤(每15分钟更新)
FROM restaurants
| WHERE city: == "上海"
AND cuisine_type IN ("本帮菜", "西餐")
AND average_cost <= 200
| EVAL crowd_risk = CASE(
(current_time > "18:00" AND predicted_wait_time > 40), "high",
"low"
)
| WHERE crowd_risk = "low"
| SORT rating DESC
(也可以用 DSL 查询)
LLM 根据 ES 多种任务的查询与计算结果,自动输出结构化方案并实时验证预算:
**上海三日游方案**
1. **Day 1**
- 上午:迪士尼(门票 599元,地铁直达避开早高峰)
- 午餐:弄堂老馆子(人均80元,当前排队12分钟)
- 晚上:外滩游船(夜景观光票 220元,21:00场次余票充足)
2. **Day 2**
- 上午:武康路历史街区(免费,8:00-10:00人流低谷)
- 午餐:静安寺素斋(人均150元,需提前1小时预约)
- 下午:豫园+城隍庙(联票 60元)
3. **Day 3**
- 全天:朱家角古镇(地铁+公交 35元,特色餐厅人均70元)
**费用实时监控**:
- 当前总预算:4995元(剩余5元可用于应急)
- 动态告警:若迪士尼排队超90分钟,自动触发备选方案(东方明珠观光)
具体 ES 实现 Agentic RAG的用例,可以参考下面的视频:
综上所述,无论是传统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 |
[1]
附录对比: ##附录
[2]
业界第一个稀疏向量的词扩展模型ELSER: https://cloud.tencent.com/developer/article/2303829