ElasticSearch实战-DocValue列式存储算法(数据排序/聚合统计)

Posted 张志翔ۤ

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ElasticSearch实战-DocValue列式存储算法(数据排序/聚合统计)相关的知识,希望对你有一定的参考价值。

        DocValue是在Lucene4.0引入的新特性,属于正排索引。DocValue其实是Lucene在构建倒排索引时,会额外建立一个有序的正排索引,它存储文档编号到字段值正排关系的索引,意在取代FieldCache在搜索时所发挥的作用,消除搜索时需要加载倒排索引构建FieldCache而引起的性能问题。相当于将FieldCache的构建下推至索引时,以空间换时间,从而获得更高的搜索性能。倒排索引是搜索的核心,而正排索引则为搜索结果的排序和统计等搜索结果加工过程提供了有力帮助。

        倒排索引,也称反向索引,它是通过Term(字段值)召回相关的文档编号。DocValue则通过文档编码号召回字段值。

        简单理解DocValue的话,它是一个以DocID为键,以Value为值的Map。它存储DocID到文档的正向关系,在排序或者统计计算时,通过DocID可以迅速取字段的值进行二次计算。

一、DocValue存储结构

        开始之前,有必要先来看一下DocValue存储上的一些细节,如针对不同的数据特点采用不同的压缩方案,根据数据集分布情况选择合适的存储格式。整个DocValue索引文件中虽说只是存储了DocID与Values之间的映射关系,但需要支持的数据类型繁多。当然必不可少是DocID和Values,此外为了能维护二者之间的关系还需要Address信息。针对多值的情况,则有TermsDict以及TermsIndex两种数据,Values还包含Numeric和Binary两种类型。

        1、Numeric存储格式  

以上是关于ElasticSearch实战-DocValue列式存储算法(数据排序/聚合统计)的主要内容,如果未能解决你的问题,请参考以下文章

干货 Elasticsearch 知识点整理二

Elasticsearch 内部数据结构深度解读

docvalue and fielddata

Solr/Lucene使用docValue查询的一个坑

53.doc value机制内核级原理深入探秘

Solr DocValues详解