在介绍Elasticsearch的倒排索引之前我们先了解一下什么是正排索引。
- 正排索引
正排索引就是文档id到文档内容、单词的关联关系,如下表中id与文档内容的关联关系。
文档ID | 文档内容 |
---|---|
1 | elasticsearch是最流行的搜索引擎 |
2 | php是世界上最好的语言 |
3 | 搜索引擎是如何诞生的 |
那么下面我们介绍一下倒排索引
- 倒排索引
单词到文档id的关联关系
单词 | 文档ID列表 |
---|---|
elasticsearch | 1 |
流行 | 1 |
搜索引擎 | 1,3 |
php | 2 |
世界 | 2 |
最好 | 2 |
语言 | 2 |
如何 | 3 |
诞生 | 3 |
倒排索引的查询流程,例如查询包含 “搜索引擎” 对应的文档,首先通过倒排索引获得 “搜索引擎” 对应的文档Id有1和3,通过正排索引查询1和3的完整内容,返回用户最终的结果。
倒排索引的组成
倒排索引是搜索引擎的核心,主要包含两部分:单词词典(Term Dictionary) 和 倒排列表(Posting List)
- 单词词典(Term Dictionary)
- 记录所有文档的单词,一般都比较大
- 记录单词到倒排列表的关联信息
- 倒排列表(Posting List)
倒排列表记录了单词的对应的文档集合,由倒排索引项(Posting)组成,倒排索引项主要信息包含如下:
- 文档ID,用于获取原始信息
- 单词频率(TF, Term Frequency), 记录该单词在该文档中出现的次数,用于后续的相关性算分
- 位置(Position), 记录单词在文档中的分词位置(多个),用于做词语搜索(Phrase Query)
- 偏移(Offset),记录单词在文档的开始和结束位置,用于做高亮显示
倒排索引-倒排列表
倒排索引