搜索引擎Inverted Index
倒排索引 是什么?
记录每个词出现在哪些文档里,是搜索快的根本原因
类比:书末的「关键词 → 页码」表
正排 vs 倒排
正排是「文档 → 包含哪些词」,要找一个词就得遍历所有文档;倒排是「词 → 出现在哪些文档」,一次查表就能拿到候选文档集合。
结构
词典(Term Dictionary)存所有词,按字典序排列,可用 FST 压缩并快速定位;倒排表(Posting List)存文档 ID、词频、位置,用于打分和高亮。
- 分词:中文用 IK 等分词器,英文按空格和词干
- 打分:BM25,考虑词频、文档长度、词的稀有度(IDF)
- 位置信息让短语查询 "蓝牙耳机" 能保证词相邻
代价
倒排索引占空间(通常和原始数据同量级甚至更大),写入时要分词建索引,所以 ES 写入比 MySQL 慢,不适合当主库。