背景:elasticsearch采用倒排索引的数据结构,从而是数据搜索速度超快
一、什么是正排索引
正排索引简单理解,就是文档ID到文档内容的关联,即先知道文档ID,才能获取文档内容
二、什么是倒排索引
倒排索引和正排索引相反,即文档内容到文档ID的关联,先知道文档内容,才能知道文档ID
2.1 倒排索引的组成:
1.1 单词词典
记录所有文档的单词,单词和倒排列表的关联关系
单词词典一般比较大,可以通过B+树或哈希拉链法实现
1.2 倒排列表
记录了单词对应的文档的的关联,由倒排索引项组成
倒排索引项:
文档ID
词频: 该单词在文档中出现的次数,用于相关性评分
位置: 单词在文档中出现的位置,用于语句搜索
偏移量: 记录单词的开始结束的位置,实现高亮显示
三、案例分析
文档ID | 文档内容 |
1 | Hello world |
2 | hello Jones |
3 | hello mis Jones |
词 | 数量 | 文档ID:位置 |
Hello | 3 | 1:0,2:0,3:0 |
world | 1 | 1:1 |
Jones | 2 | 2:1,3:2 |
mis | 1 | 3:1 |
正排: 即通过文档ID,可以获取文档内容
倒排: 我们可以看到词出现的频率和出现的文档ID以及位置关系