---
title: "混合检索：向量加关键词"
description: "稠密向量擅长语义，BM25 擅长专名与错误码。这一页讲清两路召回怎么用倒数排名融合、权重怎么调、什么时候单路就够，以及混合检索的延迟代价。"
updated: 2026-11-13
canonical: https://docai.cc/concepts/hybrid-search/
markdown_mirror: https://docai.cc/concepts/hybrid-search.md
---
## 它是什么

混合检索（hybrid search）是把向量检索和关键词检索的结果合并，用两套互补的信号找候选。稠密向量擅长语义：意思相近但用词不同也能匹配；关键词检索（典型是 BM25）擅长精确字符串：专名、编号、版本号、错误码，一字不差才对。

## 怎么工作

两路并行召回。向量路把查询和文档编码成向量，按相似度取 top-k；关键词路按词项匹配打分，也取 top-k。两路各给出一个候选列表。

融合最常用的是倒数排名融合（RRF）。它不看原始分数，只看每路里的名次，按名次给分再相加。这样做的原因是向量相似度和 BM25 分数量纲不同，直接相加会偏向其中一路；按名次融合省去了归一化，也足够稳。

权重可以按查询类型调：查询里有错误码、版本号、人名、缩写时，提高关键词路的权重；查询是口语化描述时，提高向量路的权重。调权重不要凭感觉，拿真实查询和标注答案做对比。

什么时候单路就够：语料小、术语统一、查询以自然语言为主，向量单路往往够用；日志、代码、错误码库这种以精确字符串为主的场景，关键词单路反而更稳。混合检索是为两类查询都存在的场景准备的。

延迟代价是真实的：两路可以并行，但关键词索引要维护分词和倒排，融合与去重也要算力。链路要设超时和降级，一路超时就退回另一路，不要整体失败。

## 常见误解

- **混合就是把两路分数相加**：分数量纲不同，直接相加会偏向某一路，按名次融合更稳。
- **向量检索能替代关键词**：编号、错误码、专名恰恰是向量的弱项。
- **两路都开一定更好**：收益取决于查询分布，索引维护成本也真实存在。
- **融合完就不用重排**：融合解决召回，精排是另一件事，两者不冲突。

## 和重排的区别

混合检索解决「候选从哪里来」，重排解决「候选怎么排序」。前者在召回层做加法，后者在排序层做判断。两者可以叠用，但每加一层都要用数据证明它值得那份延迟。

## 延伸阅读

- 向量怎么表示：[什么是 embedding](/concepts/embedding/)
- 检索的整体流程：[什么是 RAG](/concepts/rag/)
- 向量存哪里：[什么是向量数据库](/concepts/vector-database/)
- 动手搭一条链路：[最小可用 RAG](/learn/minimal-rag/)
