ElasticSearch实战-Skip List 跳表算法(文档定位跳跃算法)

Posted 张志翔ۤ

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ElasticSearch实战-Skip List 跳表算法(文档定位跳跃算法)相关的知识,希望对你有一定的参考价值。

        ElasticSearch在对索引内存块地址进行分割,通过Skip List来快速定位内存块地址,这里形象的举个例子。

        打个比方这里有一个很长的posting list,比如:

[1,3,13,101,105,108,255,256,257]

        我们可以把这个list分成三个block:

[1,3,13] [101,105,108] [255,256,257]

        然后可以构建出skip list的第二层:

[1,101,255]

        1,101,255分别指向自己对应的block。这样就可以很快地跨block的移动指向位置了。

        Lucene自然会对这个block再次进行压缩。其压缩方式叫做Frame Of Reference编码。

        考虑到频繁出现的term(所谓low cardinality的值),比如gender里的男或者女。如果有1百万个文档,那么性别为男的posting list里就会有50万个int值。用Frame of Reference编码进行压缩可以极大减少磁盘占用。这个优化对于减少索引尺寸有非常重要的意义。当然mysql b-tree里也有一个类似的posting list的东西,是未经过这样压缩的。

        因为这个Frame of Reference的编码是有解压缩成本的。利用skip list,除了跳过了遍历的成本,也跳过了解压缩这些压缩过的block的过程,从而节省了cpu。

        到此Skip List 跳表算法(文档定位跳跃算法)介绍完成。

以上是关于ElasticSearch实战-Skip List 跳表算法(文档定位跳跃算法)的主要内容,如果未能解决你的问题,请参考以下文章

Elasticsearch 5.4.3实战--Java API调用:搜索

Keras深度学习实战(25)——使用skip-gram和CBOW模型构建单词向量

Keras深度学习实战(25)——使用skip-gram和CBOW模型构建单词向量

跳跃表(skip list)

java 中的skip list

探索Skip List (跳跃表)