Fork me on GitHub

版权声明 本站原创文章 由 萌叔 发表
转载请注明 萌叔 | https://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


请我喝瓶饮料

微信支付码

发表回复

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