正排索引和倒排索引
正排索引
正排索引就是通过索引id找到内容,比如通过书本的目录找到内容。
倒排索引
倒排索引就是把正排索引倒过来,通过内容找到索引id.
建立一个倒排索引
id | 内容 |
---|---|
1 | php java go |
2 | php es |
3 | php 开发 |
把上面的内容可以建立成下面的倒排索引
内容 | Count | id |
---|---|---|
php | 3 | 1:0,2:0,3:0 |
java | 1 | 1:1 |
go | 1 | 1:2 |
es | 1 | 2:1 |
开发 | 1 | 3:1 |
倒排索引的核心组成
单词词典
记录所有文档的单词 记录单词到倒排列表的关联关系。
单词词典一般比较大,可以通过B+树或hash拉链法实现,以满足高性能的插入和查询
倒排列表
记录了单词对应的文档结合,由倒排索引项组成
倒排索引项
- 文档id
- 词频 该单词在文档中出现的次数,用于相关性评分
- 位置 单词在文档中分词的位置。用于语句搜索
- 偏移 记录单词的开始结束位置,实现高亮显示
ES中的倒排索引
ES的JSON文档中的每个字段,都有自己的倒排索引
可以指定对某些字段不做索引
- 优点:节省存储空间
- 缺点:字段无法被搜索
极客时间 ES 学习笔记