倒排索引的构建与原理
本章定位:倒排索引是全文搜索的核心数据结构。理解它的构建原理和查询时的工作方式,才能真正理解 ES 为什么快。
定义与作用
倒排索引(Inverted Index)是"词项(Term)→ 文档列表(Posting List)"的映射。与正排索引(文档→词项列表)相反。搜索时,通过检索词项直接定位包含该词的文档集合,通过交集、并集等快速运算得到结果。
解决的痛点:正排索引需要逐文档扫描判断是否包含搜索词(全表扫描),倒排索引从词出发直接定位到文档,是大数据量全文搜索的基础。
完整示例:构建倒排索引
文档 1:Python 数据分析教程
文档 2:机器学习与数据挖掘
分词后倒排:
"Python" → [Doc1]
"数据" → [Doc1, Doc2]
"分析" → [Doc1]
"教程" → [Doc1]
"机器" → [Doc2]
"学习" → [Doc2]
"挖掘" → [Doc2]
搜索"数据分析":分词→"数据"+"分析"→取交集[Doc1]→直接命中
Posting List 结构
词项: "数据"
Posting List: [Doc1, Doc2]
Doc1: 位置[2], 词频1
Doc2: 位置[4], 词频1
词频用于 BM25 评分,位置用于 match_phrase 短语匹配。
小结
倒排索引:词→文档映射。搜索 = 词项查找 + 交集/并集运算 + BM25 评分。这是 ES 全文搜索的核心竞争力。Posting List 中的词频和位置信息支撑了评分和短语匹配。