混合检索到底是什么?为什么大模型 RAG 系统离不开它?一文讲透 BM25、向量检索与 Hybrid Search
一、先说结论:混合检索不是“更高级的搜索”,而是“更稳的搜索”
现在很多人做 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
- 向量检索
- 找不到
- 准确文档
它会从倒排索引里找包含这些词的文档。
可能返回:
- 《RAG 检索准确率优化方案》
- 《向量检索召回不足排查》
- 《知识库文档切片策略》
- 《Embedding 模型选择指南》
3、第三步:走向量检索
向量检索会把用户问题转成向量,然后找语义相近的内容。
它可能返回:
- 《RAG 召回率低的原因》
- 《如何优化知识库问答效果》
- 《文档切片、Embedding 与重排序》
- 《大模型回答不准确的排查流程》
你会发现,关键词检索和向量检索返回的内容有重叠,但也有差异。
4、第四步:结果融合
系统要把两边结果合并成一个最终列表。
比如:
关键词检索结果:
- A 文档
- B 文档
- C 文档
向量检索结果:
- B 文档
- D 文档
- A 文档
融合后可能变成:
- B 文档
- A 文档
- D 文档
- 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 助手系统,一定要认真理解混合检索。
它不是一个炫技概念,而是大模型落地里非常实用、非常关键的一环。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐

所有评论(0)