1. 为什么在 RAG 里要用关键词检索?
- 向量检索(embedding-based retrieval)是找语义相近的内容,但有时候不够准确。
- 比如用户问了具体人名、产品型号、年份,这类关键词强指向性的信息,用向量检索可能匹配不到最相关内容。
- **关键词检索(keyword-based retrieval)**可以直接通过词匹配(如倒排索引、BM25)拿到精准结果。
所以,在 RAG 里常常会混合用:
→ 先关键词召回,再向量检索排序,或者两者结合。
2. 关键词检索的基本实现方式
主流有几种方法:
(1)简单倒排索引
- 建一个词到文档ID的倒排表(Elasticsearch、Lucene 就是干这个的)
- 用户query分词后,直接去倒排表里查有哪些文档包含这些词
- 计算一个得分,比如常见的 BM25
例子:
query: "Apache Flink 流式计算"
分词: