中间件速查手册
搜索引擎Inverted Index

倒排索引 是什么?

记录每个词出现在哪些文档里,是搜索快的根本原因

类比:书末的「关键词 → 页码」表

正排 vs 倒排

正排是「文档 → 包含哪些词」,要找一个词就得遍历所有文档;倒排是「词 → 出现在哪些文档」,一次查表就能拿到候选文档集合。

结构

词典(Term Dictionary)存所有词,按字典序排列,可用 FST 压缩并快速定位;倒排表(Posting List)存文档 ID、词频、位置,用于打分和高亮。

  • 分词:中文用 IK 等分词器,英文按空格和词干
  • 打分:BM25,考虑词频、文档长度、词的稀有度(IDF)
  • 位置信息让短语查询 "蓝牙耳机" 能保证词相邻

代价

倒排索引占空间(通常和原始数据同量级甚至更大),写入时要分词建索引,所以 ES 写入比 MySQL 慢,不适合当主库。

它出现在这些中间件里

相关问题

相关概念