我知道每个文档都有一个标志,当我们删除文档时,Lucene会取消它。我需要了解更多关于它的细节,因为我想在很多索引上使用它,性能对我来说很重要。
Lucene如何找到旗帜?删除的磁盘利用率是多少?
答案 0 :(得分:1)
Lucene将已删除文档标记为扩展名为.del
的文件,此文件格式为:Format,Header,ByteCount,BitCount,Bits | DGaps(取决于格式)
格式为1:表示清除了DGaps。
ByteCount表示Bits中的字节数。它通常是(SegSize / 8)+1。
BitCount表示当前在位中设置的位数。
每个索引的文档的位包含一位。清除与文档编号对应的位时,该文档被标记为已删除。比特排序从最小到最重要。因此,如果Bits包含两个字节0x00和0x02,则文档9被标记为活动(未删除)。
DGaps比Bits更有效地表示稀疏位向量。它由Bits中的nonOnes字节索引上的DGap和非单词字节本身组成。不存储位(NonOnesBytesCount)中的nonOnes字节数。
例如,如果有8000位且仅清除了10,12,32位,则将使用DGaps:
(VInt)1,(字节)20,(VInt)3,(字节)1
lucene I / O操作取决于打开的IndexWriter
或IndexWriter
的对象数量,这意味着如果要删除或索引文档数,可以保存在一次I / O点击中,在完成工作的情况下使用writer.commit()
或writer.close()
。
我想说的是创建和初始化IndexWriter
是成本,而lucene建议使用一个IndexWriter
对象。
Here你可以找到关于lucene的所有事情。