Elasticsearch 篇之倒排索引与分词
书的目录与索引
正排索引
- 文档Id到文档内容、单词的关联关系
| 文档Id | 文档内容 |
|---|---|
| 1 | elasticsearch是最流行的搜索引擎 |
| 2 | php是世界上最好的语言 |
| 3 | 搜索引擎是如何诞生的 |
倒排索引
- 单词到文档id的关联关系
| 单词 | 文档ID列表 |
|---|---|
| elasticsearch | 1 |
| 流行 | 2 |
| 搜索引擎 | 1,3 |
| php | 2 |
| 是 | 1,2,3 |
正排与倒排索引简介
查询包含"搜素引擎"的文档
- 通过倒排索引获得"搜索引擎"对应的文档Id有1和3
- 通过正排索引查询1和3的完整内容
- 返回用户最终结果
倒排索引详解
倒排索引组成
- 单词词典(Term Dictionary)是倒排索引的重要组成
- 记录所有文档的单词,一般都比较大
- 记录单词到倒排列表的关联信息
- 单词字典的实现一般是用B+ Tree,示例如下图:
- 倒排列表(Posting List)记录了单词对应的文档集合,由倒排索引项(Posting)组成
- 倒排索引项(Posting)主要包含如下信息:
- 文档Id,用于获取原始信息
- 单词频率(TF,Term Frequency):记录改单词在该文档中出现次数,用于后继相关性算分
- 位置(Position):记录单词在文档中的分词位置(多个),用于做词语搜索(Phrase Query)
- 偏移(Offser):记录单词在文档的开始和结束位置,用于做高亮显示
- 以"搜索引擎"为例
- 倒排索引与倒排列表整合在一起的结构如下:
- es存储的是一个json格式的文档,其中包含多个字段,每个字段会有自己的倒排索引。
- 倒排索引项(Posting)主要包含如下信息: