版权声明 本站原创文章 由 萌叔 发表
转载请注明 萌叔 | http://vearne.cc

注意:本文基于lucene 3.1

引言

最近一直在看lucene相关的资料,今天介绍一下lucene中的索引文件的一部分
*.del文件

概述

如果索引文件中,有被删除的doc,则lucene会创建*.del文件
*.del 记录了被删除doc的ID
采用2中方法

1)BitVector

BitVector等同于C++中的bitset,每个bit对应一个doc
如下图,假定共有24个doc,其中10、12被删除
此处输入图片的描述
注意 在一个segment中,doc ID从0开始

2) DGaps

如果segment中的文档数量较多,而被删除的文档很少,那么将有大量的bit为0,少量为1。这种稀疏的BitVector,非常浪费存储空间。因此lucene提供了
DGaps这种存储格式,我们可以把它看做是BitVector的一种压缩格式。

它的思想是这样的,只有少量的bit被置为1,那么就只记录非0的字节,
所以对于每个非0的字节,需要一个二元组去记录
(Dgap, NonzeroByte)
Dgap 表示该字节是第几个字节(从0开始,用vint表示, 关于vint可参考我的另一篇文章VINT–针对INT型的压缩格式
NonzeroByte 表示这个字节的值
对于上面的例子,只有byte1 是非0字节,所以最终结果如下

00000001 00010100

参考资料

1. Apache Lucene – Index File Formats

如果我的文章对你有帮助,你可以给我打赏以促使我拿出更多的时间和精力来分享我的经验和思考总结。

微信支付码

anyShare分享到:

发表评论

电子邮件地址不会被公开。 必填项已用*标注

This site uses Akismet to reduce spam. Learn how your comment data is processed.