ES 索引解析(倒排索引 正排索引)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ES 索引解析(倒排索引 正排索引)相关的知识,希望对你有一定的参考价值。

参考技术A

何为倒排索引?首先要了解索引表:由关键词为key,关键词位置属性为value组成的一张表。由于该表不是由key来确定value值,而是由value的属性值来确定key的位置,所以称为倒排索引,带有倒排索引的文件称为倒排文件。通俗的讲倒排索引就好比书的目录,通过目录咱们可以准确的找到相应的数据。下面对lucene倒排索引的结构与算法进行介绍。

对于获取关键词有两种思路,1.根据空格分隔获取所有的字符2.过滤文档中没有意义的词,获取其中的关键词。除此以上还会对词的时态,大小写,同义词,标点符号等做相应的处理,不同的分词器对文档索引的时候做的操作有所差异。
实例1:Tom lives in Zhangye,I live in Zhangye too.
关键词1:[tom][live][in][zhangye][i][live][zhangye]
实例2:He once lived in Shanghai
关键词2:[he][live][shanghai]

根据关键词我们就可以确定关键词所在的文章号,关键词在文章中出现的频次以及该关键词在文章中出现的位置(根据上面获取关键词我们可以知道,索引的时候要么索引所有字符,要么索引关键词,lucene采取的就是索引关键词的方式,这样会节省大量的空间),具体索引如下表:

1)词典文件:每个关键词以及指向频率文件和位置文件的指针和filed(用于表达信息位置,每个关键词都有一个或多个field)信息
2)频率文件:关键词在每个文件中出现频率的文件
3)位置文件:关键词所在文章中的位置文件

关键词压缩为<前缀长度,后缀>,例如:“我爱你中国”=》<3,中国>,另外对数字的压缩,只记录与上一个数字的差值,比如当前文章号是11890,上一个文章号是11870,压缩后只需要报错20,这样就极大的缩小了存储空间。

倒排索引服务于es查询操作,对数据的聚合,排序则需要使用正排索引,下面我们介绍正排索引。

正排索引说白了就是document每个field的值的排序,其实就是doc values,举例说明:
实例:
doc1: "name": "张三", "age": 27,"sex":"男"
doc2: "name": "李四", "age": 30,"sex":“女”
正排索引:
document name age sex
doc1 jack 27 男
doc2 tom 30 女
正排索引使用场景是排序,聚合,过滤等
注意:
对于分词的field进行聚合(aggregation)操作,需要将fielddata设置为true,否则会报错提示你打开fielddata、将正排索引加载到内存中

doc values是被保存在磁盘上的,此时如果内存足够,os会自动将其缓存在内存中,性能还是会很高;如果内存不足够,os会将其写入磁盘上。

到此对倒排索引与正排索引就介绍完毕了,如有帮助,请关注!谢谢!

以上是关于ES 索引解析(倒排索引 正排索引)的主要内容,如果未能解决你的问题,请参考以下文章

正排索引倒排索引

ElasticSearch倒排索引及其原理

正排索引与倒排索引(转)

倒排索引,正排索引与lucene

正排索引和倒排索引简单介绍

正排索引 与 倒排索引