Lucene初探之数据格式详情

Posted Derrick_gu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Lucene初探之数据格式详情相关的知识,希望对你有一定的参考价值。

Lucene初探之数据格式详情(六)

在之前的几篇文章中,我们共同探索了Lucene创建索引文件时正向信息、反向信息和标准因子的存储方式和原理。在实际的生产应用环境中,由于业务等需要,我们不仅仅只是需要创建索引,有时候我们还需要去删除或者更新索引中的特定文件,但是Lucene本身不支持直接去更新文件,所以,更新操作会被分为删除、插入两个步骤。同时在生产环境中由于各种原因,如果直接去在物理上删除掉相关文档的话会导致一系列的问题,所以,每一个删除操作都会生成一个del文件,其中记录了被删除的文档的信息,这些信息是被保护的,每次搜索引擎对索引进行查询匹配之后,会通过该文件将结果中的被删除文档过滤掉。下面是del文件的存储方式:

  • 被删除文件(Deleted Documents:del)
    • Format:在此文件中,Bits和DGaps是以或的关系存储的,-1表示DGaps,非负值表示被保存的是Bits;
    • ByteCount:比奥斯此段中有多少文档,存储方式为bit,但是是以Byte来计数的,即Bits和Byte的数值关系为倍数;
    • BitCount:Bits中有多少位1,就代表有多少文档被删除;
    • Bits:一个ByteCount大小的数组,每一个数组为一个byte,在应用时被认为byte*8个bit;
    • DGaps:DGaps是为了减少Bits的浪费而设置的,因为如果说被删除的文档数量很少,那么Bits中的1的数量就会很少,也就是说0的数量会很多。当第十个、十二、三十二个数组被删除,第十、十二、三十二位被置为1,DGaps也是以Byte为单位,仅仅保存不为0的Byte,如第1个Byte,第4个Byte,第一个Byte十进制为20,第4个Byte十进制为1。于是保存为DGaps,第一个Byte,位置1使用不定长正整数保存,值为20用二进制保存,第2个byte,位置4用不定长正整数保存,用差值为3,值为1用二进制保存,二进制数据不以差值保存。

最后,我们总结一下整个Lucene的索引存储格式如下:

以上是关于Lucene初探之数据格式详情的主要内容,如果未能解决你的问题,请参考以下文章

Lucene初探之数据格式详情

Lucene初探之数据格式详情

Lucene初探之数据格式详情

Lucene初探之数据格式详情

Lucene初探之数据格式详情

Lucene初探之数据格式详情