Skip to content

倒排索引

一句话

搜索引擎的目录页。 正常索引是「文档 → 包含哪些词」,倒排索引反过来:「词 → 出现在哪些文档」

类比

想象一本书:

  • 正排索引(目录):第 1 章讲什么、第 2 章讲什么……
  • 倒排索引(书末索引):「Agent」这个词出现在第 1 页、第 15 页、第 102 页……

你要找「Agent 相关的内容」,翻书末索引比翻全书快得多。

为什么需要它

全文检索的核心操作是:「用户输入一个词,找到所有包含这个词的文档」。如果没有倒排索引,每次都要遍历所有文档——数据量大时不可接受。有了倒排索引,直接 O(1) 查词 → O(n) 取文档列表。

在 RAG 体系中的位置

文档入库 → 分词 → 建倒排索引

用户查询 → 分词 → 查倒排索引 → BM25 打分 → 返回文档

它是 BM25 和 ElasticSearch 的底层基础设施。

应用场景

倒排索引的应用远不止搜索引擎:

场景示例
全文搜索ES 的核心数据结构
标签系统「标签 → 文章列表」就是倒排索引
日志分析按错误码快速定位相关日志

横向对比

正排索引(MySQL)倒排索引(ES)
存储结构行 → 字段值词 → 文档 ID 列表
查「包含某词的文档」全表扫描 LIKEO(1) 查词
查「某文档的所有字段」O(1) 主键需要额外存储
典型场景OLTP 事务全文检索

优缺点

优点: 关键词查找极快,结构简单,ES 的核心竞争力来源 缺点: 需要额外存储(每个词都建索引),更新成本高(插入文档要重建索引),不支持模糊语义

小结

倒排索引是「搜索引擎为什么这么快」的答案。理解了倒排索引,你就能理解为什么 ES 比 MySQL LIKE 快几百倍——不是算法多聪明,是数据结构选对了。

下一步

  • IK 分词器 — 中文分词的前置步骤
  • BM25 — 在倒排索引上打分排序