26.混合检索是什么关键词检索与向量检索如何结合
2026/9/11 19:35:52 网站建设 项目流程

混合检索是什么?关键词检索与向量检索如何结合?

码海寻道 · 大模型、智能体与 RAG 工程组件系列第 26 篇

向量检索擅长理解语义,但可能忽略精确的产品型号、合同编号、错误码和专有名词;关键词检索擅长精确匹配,却不一定理解同义表达。混合检索的目标,是同时利用两种能力。

混合检索通常不是把两个分数直接相加。不同检索器的分数范围、排序方向和候选数量可能完全不同,必须先做候选去重、分数归一化或使用排名融合,再交给 Reranker。

一、两种检索各自擅长什么?

稠密向量检索

把问题和文档转换为稠密向量,根据语义距离查找相关内容。适合:

  • 同义改写;
  • 自然语言问题;
  • 概念和主题关联;
  • 用户表达不规范的场景。

稀疏或关键词检索

根据词项、频率和倒排索引匹配文本。适合:

  • 产品型号;
  • API 名称和错误码;
  • 人名、组织名、合同编号;
  • 必须出现的精确词。

二、为什么单一检索会失败?

用户问:“错误码PG-23505如何处理?”

关键词检索很容易定位包含该错误码的文档,而纯语义检索可能认为“数据库唯一约束冲突”与问题相关,却漏掉精确的错误码页面。

反过来,用户问:“员工出差住酒店超标怎么办?”如果文档写的是“住宿费用超出标准的处理流程”,关键词可能匹配不稳定,而向量检索更容易理解语义关系。

三、混合检索的基本流程

用户问题 ├── 稠密 Embedding → 向量检索 → 候选 A └── 关键词 / BM25 → 倒排检索 → 候选 B ↓ 合并、去重、归一化 ↓ RRF 或加权重排 ↓ Top K 结果

四、RRF 是什么?

不同检索器的分数通常不可直接比较。余弦相似度、BM25 分数和内积的数值范围可能不同,直接相加容易让某一路结果天然占优。

RRF(Reciprocal Rank Fusion)可以按排名合并:

RRF(d) = Σ 1 / (k + rank_i(d))

其中rank_i(d)是文档在第 i 个检索结果中的名次,k是平滑常数。RRF 不要求不同检索器的分数处于同一尺度,工程上较容易使用。

工程上要保存每个候选来自哪些召回通道,便于解释“为什么命中”,也便于分析某个通道是否长期带来噪声。

五、Milvus 中的混合检索思路

Milvus 支持在同一集合中保存稠密和稀疏向量,并通过混合搜索合并结果。伪代码如下:

dense_request=AnnSearchRequest([dense_query],"dense_vector",{"metric_type":"COSINE"},limit=20)sparse_request=AnnSearchRequest([sparse_query],"sparse_vector",{"metric_type":"IP"},limit=20)results=client.hybrid_search(collection_name="knowledge_chunks",reqs=[dense_request,sparse_request],ranker=RRFRanker(),limit=10,)

具体方法名和参数随 SDK 版本可能不同,正式实现应参考目标版本文档。混合检索并不是“加两个字段”就完成,还需要同时维护两种向量的生成和版本。

两路召回还应使用相同的租户、权限和文档版本边界,合并时按稳定的chunk_id去重,并记录各通道命中数、融合后命中数和最终排名。

六、如何选择权重?

如果使用加权融合,可以根据查询类型动态调整:

包含错误码、型号、编号 → 提高关键词权重 自然语言解释型问题 → 提高语义权重 无法判断查询类型 → 使用 RRF 或默认权重

权重不要凭感觉长期固定。应准备包含精确术语和自然语言问题的评测集,比较 Recall@K、MRR、答案引用正确率和延迟。

七、混合检索不等于最终答案

混合检索得到的是候选集合,还可能需要:

  • 按租户和权限过滤;
  • 按文档版本过滤;
  • document_id去重;
  • 使用 Reranker 对候选重新排序;
  • 控制送入大模型的上下文数量。
稠密 + 稀疏候选 ↓ 融合与去重 ↓ Reranker ↓ 上下文压缩 ↓ 大模型回答

八、什么时候不需要混合检索?

如果语料主题单一、用户问题简单、关键词检索效果已经足够,额外引入稀疏向量会增加模型调用、索引和运维成本。不要为了“架构完整”而强行使用混合检索。

九、上线时需要注意什么?

  • 稠密和稀疏向量必须对应同一 Chunk;
  • 两种索引的更新和删除要保持一致;
  • 记录各路召回数量和合并后的数量;
  • 监控关键词检索和语义检索的空结果率;
  • 对编号、金额和日期等字段增加规则校验;
  • 注意混合检索会增加查询延迟和内存占用。

结语

混合检索的价值在于互补:向量检索理解“意思相近”,关键词检索守住“词必须准确”。二者合并后,再通过去重、重排和评测,才能形成适合企业知识库的检索链路。

下一篇将继续优化召回质量,从查询改写、召回数量和 Reranker 讲起。

参考资料

  1. Milvus 官方文档:Hybrid Search
  2. Milvus 官方文档:Sparse Vector
  3. Milvus 官方文档:Full Text Search
  4. PostgreSQL 官方文档:Full Text Search

本文为“码海寻道”原创技术文章。混合检索 API 和索引能力会随版本变化,请使用目标版本 SDK 实测。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询