一、先说结论:混合检索不是“更高级的搜索”,而是“更稳的搜索”

现在很多人做 RAG、大模型知识库、企业智能问答,一上来就说:“我要用向量数据库。”
但真正落地之后,很快会发现一个问题:

只靠向量检索,不够稳。只靠关键词检索,又不够聪明。

所以工程里常用一种折中但非常实用的方案:

混合检索,也叫 Hybrid Search。

简单理解:

混合检索 = 关键词检索 + 向量语义检索 + 结果融合排序。

它既能找“字面上匹配”的内容,也能找“意思相近”的内容。Elastic、Weaviate、Google Vertex AI、Pinecone 等主流搜索和向量数据库都把 Hybrid Search 作为重要能力:它通常把 BM25 这类关键词检索和向量语义检索结合起来,最后合成一个排序结果。


二、为什么会出现混合检索?因为单一检索都有短板

1、传统关键词检索:很准,但不懂“意思”

关键词检索最典型的代表就是 BM25

你可以把 BM25 理解成搜索引擎里的“老兵”。

比如用户搜索:

“Java 线程池拒绝策略”

关键词检索会重点找包含:

  • Java
  • 线程池
  • 拒绝策略

这些词的文档。

它的优点非常明显:

1)精确词匹配能力强。
比如搜索接口名、错误码、订单号、合同编号、类名、方法名,关键词检索非常靠谱。

2)可解释性强。
为什么这篇文档排前面?因为它命中了关键词,而且关键词出现位置、频率、重要性都比较高。

3)速度快,成本低。
传统倒排索引已经发展很多年,非常成熟。

但是它也有很明显的问题:

它不太懂语义。

比如用户问:

“系统为什么登录不上?”

文档里写的是:

“用户认证失败的常见原因”

关键词检索可能就匹配不好,因为“登录不上”和“认证失败”字面不一样。

再比如用户问:

“怎么让接口别被刷爆?”

文档里可能写的是:

“限流、熔断与降级方案”

关键词检索如果没有命中“限流”“熔断”,就可能找不到。

所以关键词检索的问题是:

字面匹配很强,语义理解偏弱。


2、向量检索:很聪明,但有时不够精确

向量检索是大模型时代非常火的技术。

它的核心思路是:

把文本变成一串数字向量,让机器根据“语义相似度”找内容。

比如:

“登录不上”
“认证失败”
“账号无法进入系统”

虽然字面不同,但语义接近,向量检索就有机会把它们匹配到一起。

它的优点也很明显:

1)能理解同义表达。
用户说“报错”,文档写“异常”;用户说“太慢”,文档写“性能瓶颈”,向量检索可能都能找到。

2)适合自然语言提问。
用户不用像搜索引擎那样精确输入关键词,可以直接问一句话。

3)适合 RAG 知识库。
大模型问答通常需要先检索相关文档,再把文档交给大模型生成答案。向量检索能帮系统找到语义相关材料。

但向量检索也不是万能的。

它最大的问题是:

对精确关键词、编号、代码、专业术语,有时不如关键词检索稳定。

举几个例子。

用户搜索:

“ERR_10086”

向量检索可能不知道这个错误码的重要性。

用户搜索:

“getUserById 方法在哪里定义?”

如果文档里有大量类似代码,向量检索可能会找出语义相近但不是完全匹配的内容。

用户搜索:

“劳动合同第 23 条”

向量检索可能找出劳动合同相关内容,但不一定精准命中“第 23 条”。

所以向量检索的问题是:

语义理解强,但精确匹配有时不稳定。


三、混合检索到底解决什么问题?

1、它解决的是“既要精准,又要理解”的问题

真实业务里的用户搜索,往往不是单一类型。

有些问题需要精确匹配:

“订单号 202604010001 的状态”
“接口 /api/user/login 报错”
“Redis ERR max number of clients reached”
“合同第 12 条怎么解释?”

有些问题需要语义理解:

“为什么系统突然变慢?”
“怎么优化大模型回答不准确的问题?”
“用户登录失败可能是什么原因?”
“知识库问答为什么老是答非所问?”

如果只用关键词检索,语义问题容易漏。
如果只用向量检索,精确问题容易偏。

所以混合检索的目标就是:

让关键词检索负责“精确命中”,让向量检索负责“语义召回”,最后把两边结果融合起来。

Weaviate 的文档也明确提到,Hybrid Search 会结合向量搜索和关键词 BM25 搜索的优势,同时考虑语义相似度和关键词相关性。


四、用一个生活例子理解混合检索

假设你去图书馆找一本书。

你对管理员说:

“我想找一本讲 Java 高并发优化的书。”

1、关键词检索像什么?

关键词检索像管理员直接去书架上找书名、目录、标签里包含:

  • Java
  • 高并发
  • 优化

的书。

如果一本书标题叫:

《Java 高并发编程实战》

那肯定能找到。

但如果一本书叫:

《大型互联网系统性能调优》

里面其实也讲 Java 并发,但标题没写“Java 高并发”,关键词检索可能就不一定排前面。

2、向量检索像什么?

向量检索像一个懂技术的老师。

他听到你说“Java 高并发优化”,会想到:

  • 线程池
  • 锁优化
  • JVM 调优
  • Redis 缓存
  • MQ 削峰
  • 数据库连接池
  • 秒杀系统设计

所以他可能给你推荐一些语义相关的书。

但问题是,他有时可能推荐得太宽泛。你明明要 Java,他可能给你推荐一本《分布式系统设计》。

3、混合检索像什么?

混合检索就是:

既让图书管理员按关键词找一遍,又让技术老师按理解推荐一遍,最后综合排序。

这样就更稳。


五、混合检索的基本流程

1、第一步:用户输入问题

比如用户问:

“RAG 里为什么向量检索找不到准确文档?”

系统拿到这个问题后,不会只走一条路,而是会并行或顺序走两条检索通道。


2、第二步:走关键词检索

关键词检索会关注:

  • RAG
  • 向量检索
  • 找不到
  • 准确文档

它会从倒排索引里找包含这些词的文档。

可能返回:

  1. 《RAG 检索准确率优化方案》
  2. 《向量检索召回不足排查》
  3. 《知识库文档切片策略》
  4. 《Embedding 模型选择指南》

3、第三步:走向量检索

向量检索会把用户问题转成向量,然后找语义相近的内容。

它可能返回:

  1. 《RAG 召回率低的原因》
  2. 《如何优化知识库问答效果》
  3. 《文档切片、Embedding 与重排序》
  4. 《大模型回答不准确的排查流程》

你会发现,关键词检索和向量检索返回的内容有重叠,但也有差异。


4、第四步:结果融合

系统要把两边结果合并成一个最终列表。

比如:

关键词检索结果:

  1. A 文档
  2. B 文档
  3. C 文档

向量检索结果:

  1. B 文档
  2. D 文档
  3. A 文档

融合后可能变成:

  1. B 文档
  2. A 文档
  3. D 文档
  4. C 文档

为什么 B 排第一?

因为它在两种检索里都表现不错。


5、第五步:可选重排序

很多 RAG 系统里,混合检索之后还会加一层 重排序 Rerank

流程变成:

用户问题 → 关键词检索 + 向量检索 → 融合排序 → Rerank 精排 → 交给大模型生成答案

Rerank 的作用是:

再认真判断一遍,哪些文档和用户问题最相关。

如果说混合检索是“多路召回”,那 Rerank 就是“最后筛选”。


六、混合检索常见的三种实现方式

1、方式一:双路检索,然后合并

这是最容易理解、也很常见的方式。

架构大概是:

用户问题
→ BM25 检索一批结果
→ 向量检索一批结果
→ 合并去重
→ 融合排序
→ 返回 Top K

这种方式的好处是:

1)结构清晰。
关键词索引和向量索引可以分开维护。

2)容易调试。
你可以分别看 BM25 召回了什么,向量检索召回了什么。

3)适合已有搜索系统改造。
很多公司本来就有 Elasticsearch,再加一个向量库,就可以做混合检索。

缺点是:

系统复杂度更高。

你要维护两个检索通道,还要写融合逻辑。


2、方式二:在同一个搜索引擎里做混合检索

一些搜索引擎已经支持关键词检索和向量检索一起做。

比如 Elasticsearch 支持把 BM25、向量检索等结合起来,并可使用 RRF 等方式融合结果。

这种方式的好处是:

1)工程链路更短。
不用自己拼多个系统。

2)索引和查询更统一。

3)适合企业搜索、知识库、日志检索等场景。

缺点是:

对搜索引擎版本、配置、性能优化要求更高。


3、方式三:稀疏向量 + 稠密向量统一检索

有些向量数据库会把关键词信息也向量化,形成所谓:

  • dense vector:稠密向量,负责语义
  • sparse vector:稀疏向量,负责关键词或词项权重

Google Vertex AI 文档提到,Hybrid Search 可以把 dense embeddings 和 sparse embeddings 混合到一个向量索引中,结合语义搜索和基于词元的搜索结果。

Pinecone 文档也提到可以在单个索引里存储 dense 和 sparse vectors,用于 hybrid search。

这种方式的好处是:

1)检索体系更统一。

2)适合向量数据库原生支持的场景。

3)不用自己维护太多外部融合逻辑。

缺点是:

需要理解具体数据库的实现方式和参数。

比如权重怎么调、稀疏向量怎么生成、分数怎么融合,都要根据产品能力来定。


七、混合检索里的关键词:BM25 是什么?

1、BM25 不要理解复杂了

BM25 是传统搜索里非常经典的相关性算法。

你不需要记公式,只要理解它关心几件事:

1)用户搜的词,文档里有没有?

有就比没有强。

2)这个词在文档里出现得多不多?

出现多,说明可能更相关。

3)这个词是不是稀有词?

比如“系统”“问题”这种词太常见,价值不高。
但“线程池拒绝策略”“ERR_CONNECTION_RESET”这种词更具体,价值更高。

4)文档长度会不会影响判断?

一篇特别长的文档可能什么词都有,不能因为它长就让它天然占优势。

所以 BM25 本质上就是:

用一套成熟规则判断“关键词和文档到底匹不匹配”。


2、BM25 适合哪些场景?

BM25 特别适合:

1)代码搜索。

比如:

“NullPointerException”
“getUserInfo”
“ThreadPoolExecutor”

2)日志搜索。

比如:

“timeout”
“connection refused”
“OutOfMemoryError”

3)法律、合同、政策文档。

比如:

“第十七条”
“违约责任”
“劳动报酬”

4)产品文档、接口文档。

比如:

“access_token”
“callback_url”
“API version 2.1”

这些内容通常要求精确命中,不能只靠语义猜。


八、混合检索里的另一个核心:向量检索是什么?

1、向量检索的核心是“意思相近”

向量检索会把一句话变成一串数字。

比如:

“用户登录失败怎么办?”
“账号无法登录如何排查?”
“认证失败的处理方法”

这些句子字面不同,但意思接近,所以它们在向量空间里可能比较接近。

你可以把向量空间想象成一张地图。

意思相近的句子住得近。
意思不相关的句子住得远。

向量检索就是:

用户问题来了,在地图上找离它最近的一批文档。


2、向量检索适合哪些场景?

向量检索特别适合:

1)自然语言问答。

比如:

“怎么提升知识库回答准确率?”

2)同义词很多的业务。

比如:

“退款”
“退钱”
“取消订单后钱什么时候回来”

3)用户表达不标准的场景。

比如用户不会说“熔断降级”,只会说:

“系统扛不住的时候怎么保护?”

4)内容推荐。

比如根据文章语义推荐相似文章。


九、混合检索为什么特别适合 RAG?

1、RAG 的关键不是“生成”,而是“先找对资料”

很多人做 RAG 的误区是:

大模型回答不好,就换更大的模型。

但实际上,很多 RAG 问题不是生成模型差,而是前面检索错了。

RAG 的完整链路通常是:

用户问题 → 检索相关资料 → 把资料交给大模型 → 大模型基于资料回答

如果检索阶段找错了,大模型后面再强也很难答对。

这就是典型的:

垃圾进,垃圾出。

如果你把错误文档塞给大模型,它可能会一本正经地生成错误答案。

所以 RAG 里最重要的一环就是:

找到真正相关的上下文。

Hybrid Search 在 RAG 中很常见,因为它可以同时提高关键词精确命中和语义召回能力。Redis 近期关于 RAG 混合检索的文章也强调,混合检索适合技术文档、法律/医疗等需要精确术语的场景,以及需要语义理解和关键词精度并存的 RAG 系统。


2、只用向量检索做 RAG,常见问题很多

1)专有名词找不准

比如用户问:

“请解释一下 XJ-2397 规则。”

向量模型可能不知道 XJ-2397 是什么。
但关键词检索可以直接命中这个编号。

2)代码、接口、字段找不准

比如:

“user_status 字段有哪些取值?”

向量检索可能找出用户状态相关文档,但不一定精确找到 user_status 字段。

3)数字、条款、版本号找不准

比如:

“v2.3.1 版本更新了什么?”
“合同第 8 条是什么意思?”

这类问题强依赖精确匹配。


3、只用关键词检索做 RAG,也有问题

1)用户表达和文档表达不一致

用户问:

“系统为什么卡?”

文档写:

“性能瓶颈排查指南”

关键词可能匹配不到。

2)业务概念有多种说法

比如:

  • 退款 / 退钱 / 返款
  • 登录 / 认证 / 鉴权
  • 变慢 / 延迟升高 / 响应时间增加
  • 崩了 / 服务不可用 / 故障

关键词检索需要做大量同义词维护,而向量检索天然更适合这类语义问题。


十、混合检索的结果融合怎么做?

1、最简单的方法:加权融合

比如系统分别给两个分数:

  • 关键词检索分数
  • 向量检索分数

然后按一定比例合成。

例如:

最终分数 = 关键词分数占 40% + 向量分数占 60%

当然实际工程里不会这么简单,因为不同检索方式的分数范围可能不一样。

关键词分数可能是 15。
向量相似度可能是 0.78。
两者不能直接相加。

所以通常需要做归一化,也就是先把分数调整到类似范围,再融合。

这种方式的好处是:

可以控制偏向。

如果你的业务更重视精确匹配,就提高关键词权重。
如果你的业务更重视语义理解,就提高向量权重。

Weaviate 的 Hybrid Search 文档中也提到,融合方法和相对权重是可配置的。


2、常见方法:RRF 排名融合

RRF 全称是 Reciprocal Rank Fusion。

不用记英文,也不用记公式。

你只要理解它的思想:

不直接看分数,而是看排名。

比如某篇文档:

  • 在关键词检索里排第 2
  • 在向量检索里排第 3

那它大概率很重要。

另一篇文档:

  • 只在向量检索里排第 1
  • 但关键词检索完全没出现

那它也可能相关,但稳定性不一定比前者高。

RRF 的优势是:

不太依赖不同检索系统的分数是否可比。

因为它主要看排名,不直接硬拼分数。

Elasticsearch 和 LangChain 相关文档中都提到可以使用 RRF 来组合 BM25 与向量检索结果。


3、工程上怎么选融合方式?

可以简单这样判断:

1)刚开始做,优先用 RRF。

因为它比较稳,不需要太多参数。

2)有标注数据后,可以做加权融合调参。

比如你有 500 条真实用户问题,并且知道每个问题应该命中哪些文档,就可以调关键词和向量的权重。

3)要求更高时,加 Rerank。

混合检索负责召回候选文档,Rerank 负责最后精排。


十一、混合检索在真实系统里的架构

1、基础版架构

适合初期知识库、内部问答系统。

流程:

文档上传
→ 文档切片
→ 建 BM25 索引
→ 生成 Embedding
→ 建向量索引
→ 用户提问
→ BM25 + 向量并行检索
→ 结果融合
→ 返回文档片段
→ 大模型生成答案

这个版本就已经能解决很多问题。


2、进阶版架构

适合企业级 RAG。

流程:

用户问题
→ Query Rewrite 问题改写
→ 意图识别
→ 元数据过滤
→ 混合检索
→ RRF 融合
→ Rerank 精排
→ 上下文压缩
→ 大模型生成
→ 引用来源返回
→ 用户反馈收集
→ 检索效果评估优化

这里面每一步都很关键。

比如用户问:

“上个月的销售政策有什么变化?”

系统可能需要先识别:

  • 时间:上个月
  • 主题:销售政策
  • 类型:政策变更
  • 文档范围:销售制度、公告、会议纪要

然后再检索。

否则直接把一句话丢进向量库,效果可能不稳定。


十二、混合检索和 Rerank 是什么关系?

1、混合检索负责“找得全”

混合检索的重点是召回。

也就是:

尽量把可能相关的文档都找出来。

它解决的是:

不要漏掉好文档。


2、Rerank 负责“排得准”

Rerank 的重点是排序。

也就是:

在候选文档里,重新判断谁最相关。

它解决的是:

不要把不重要的文档排前面。


3、两者不是替代关系,而是配合关系

一个好的 RAG 系统通常是:

混合检索召回 50 条
Rerank 精排出 5 条
大模型基于 5 条生成答案

这样既保证召回范围,又控制上下文质量。


十三、混合检索适合哪些业务场景?

1、企业知识库问答

比如:

  • 公司制度
  • 产品手册
  • 技术文档
  • 运维手册
  • 客服知识库
  • 培训资料

用户问法很自然,但文档里有大量专业词、编号、章节。

这类场景非常适合混合检索。


2、技术文档搜索

比如:

  • Java 文档
  • API 文档
  • SDK 文档
  • 数据库文档
  • 错误码文档
  • 日志排查手册

技术文档既有语义问题,也有大量精确关键词。

比如:

“线程池满了怎么处理?”
“RejectedExecutionHandler 有哪些策略?”
“502 和 504 有什么区别?”

这些问题既需要理解,也需要精确命中术语。


3、法律、合同、政策检索

法律合同类场景非常重视精确性。

用户可能问:

“合同第 9 条违约责任怎么理解?”
“竞业限制补偿标准是什么?”
“劳动合同解除有哪些条件?”

这里不能只靠向量检索“猜相似”,必须保留关键词检索的精确能力。


4、电商搜索

电商搜索也很适合混合检索。

用户搜索:

“适合电脑主机用的降噪耳机”

关键词检索会找:

  • 降噪
  • 耳机
  • 电脑
  • 主机

向量检索会理解:

  • 用于 PC
  • 低延迟
  • 游戏/办公
  • 麦克风
  • 舒适佩戴

两者结合,效果更好。


5、客服机器人

客服问题经常口语化。

比如:

“我钱咋还没到账?”
“订单卡住了怎么办?”
“东西坏了能不能退?”

文档可能写的是:

  • 退款到账时间
  • 订单履约异常
  • 售后退换货政策

向量检索能理解口语表达,关键词检索能保证政策条款、订单状态等精确命中。


十四、混合检索不适合哪些情况?

1、数据量特别小

如果你的知识库只有几十篇文档,直接向量检索加人工规则可能就够了。

没必要一开始就搞复杂架构。


2、搜索问题非常简单

比如只是做后台管理系统里的:

  • 按标题搜索
  • 按编号搜索
  • 按用户名搜索
  • 按手机号搜索

这种场景关键词检索就够了。


3、没有做文档切片和清洗

混合检索不是魔法。

如果你的文档本身很乱:

  • 大段 PDF 解析错乱
  • 表格丢失
  • 标题层级混乱
  • 文档切片过长或过短
  • 重复内容很多

那混合检索也救不了全部问题。

RAG 系统里,文档处理质量非常重要。


十五、做混合检索时最容易踩的坑

1、以为“向量检索越多越好”

很多人会把 Top K 设置很大,比如一次召回 100 条、200 条。

但问题是:

召回太多,不代表最终效果好。

如果后面没有好的 Rerank 和过滤,大量无关文档会进入上下文,反而影响大模型回答。


2、关键词检索和向量检索权重乱调

有些系统提供 alpha 参数,控制关键词和向量的权重。

比如:

  • 更偏关键词
  • 更偏向量
  • 两者均衡

但这个参数不能拍脑袋。

应该根据业务场景调。

如果是代码、合同、错误码,关键词权重可以高一点。
如果是客服问答、语义问答,向量权重可以高一点。


3、文档切片不合理

这是 RAG 里非常常见的问题。

切片太长:

检索结果包含很多无关内容,大模型读起来成本高。

切片太短:

上下文不完整,大模型拿不到完整信息。

比较好的做法是:

  • 按标题层级切
  • 按段落切
  • 保留上下文窗口
  • 给 chunk 加元数据
  • 保留原文来源

4、没有元数据过滤

比如用户问:

“2025 年的销售政策是什么?”

如果系统不做时间过滤,可能把 2023 年文档也召回。

元数据很重要,比如:

  • 文档类型
  • 发布时间
  • 部门
  • 版本号
  • 权限范围
  • 产品线
  • 地区

混合检索解决的是相关性问题,元数据过滤解决的是范围问题。


5、没有评估体系

很多团队做 RAG,凭感觉调参数。

今天觉得向量好。
明天觉得 BM25 好。
后天觉得模型不好。

这很危险。

应该建立测试集,比如:

  • 100 条真实用户问题
  • 每条问题对应标准答案
  • 每条问题对应正确文档
  • 记录召回率、准确率、人工评分

否则混合检索很难持续优化。


十六、一个企业 RAG 的推荐配置

1、初级配置

适合刚起步:

  • 文档切片
  • BM25 检索
  • 向量检索
  • RRF 融合
  • Top 5 给大模型

优点:

简单、稳定、容易落地。


2、中级配置

适合正式上线:

  • 文档清洗
  • 标题层级切片
  • BM25
  • 向量检索
  • 元数据过滤
  • RRF 融合
  • Rerank
  • 引用来源
  • 用户反馈

优点:

可控性更强,回答质量更稳定。


3、高级配置

适合复杂企业知识库:

  • Query Rewrite
  • 多路检索
  • 混合检索
  • Rerank
  • 权限过滤
  • 多知识库路由
  • 上下文压缩
  • 答案引用
  • 反馈闭环
  • 检索评估平台
  • A/B 测试

优点:

能支撑复杂业务和大规模知识库。


十七、混合检索和 Agent 有什么关系?

很多人会把 RAG、Agent、混合检索混在一起。

其实它们不是一个层级的东西。

1、混合检索是检索技术

它解决的是:

怎么从知识库里找资料。


2、RAG 是大模型问答架构

它解决的是:

怎么让大模型基于外部知识回答。

混合检索通常是 RAG 里面的一个模块。


3、Agent 是任务执行框架

Agent 解决的是:

怎么让大模型规划任务、调用工具、执行动作。

Agent 可以调用 RAG。
RAG 里面可以用混合检索。

所以关系可以理解成:

Agent 可以调用 RAG,RAG 可以使用混合检索。


十八、用一句话讲清混合检索

如果要用一句话总结:

混合检索就是把关键词检索的“准”和向量检索的“懂”结合起来,让系统既能精确命中,又能理解用户真实意图。


十九、总结

混合检索之所以重要,是因为真实业务里的搜索问题非常复杂。

用户有时输入的是精确关键词,比如错误码、字段名、接口名、合同条款。
用户有时输入的是自然语言,比如“为什么登录不上”“系统太慢怎么办”“怎么优化知识库问答”。

关键词检索擅长精确匹配,但语义理解弱。
向量检索擅长语义理解,但精确命中不一定稳定。
混合检索把两者结合起来,再通过融合排序、Rerank、元数据过滤等方式,提升最终检索质量。

对于大模型 RAG 系统来说,混合检索不是锦上添花,而是非常重要的基础能力。

因为 RAG 的核心不是让大模型“编得更像”,而是让它“先找到正确资料”。
资料找对了,答案才可能靠谱。
资料找错了,模型再强也容易胡说八道。

所以,如果你正在做企业知识库、智能客服、技术文档问答、合同政策检索、AI 助手系统,一定要认真理解混合检索。

它不是一个炫技概念,而是大模型落地里非常实用、非常关键的一环。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐