Lucene从索引文件中获取所有未删除的文档

时间:2015-06-09 12:33:13

标签: java indexing lucene

我试图从Lucene Index获取所有文件(已经没有删除)。

我听说如果我从Lucene Index中删除一些东西,Lucene就不会立即从文件中删除。

所以我想从索引文件中获取未删除的文件。

2 个答案:

答案 0 :(得分:2)

Lucene提供了所有未删除文档的位集,称为liveDocs。您可以iterating通过所有LeafReader(或使用SlowCompositeReaderWrapper)并调用liveDocs方法或使用MultiFields类来获取它。

一旦有了这个bitset,你可以从0IndexReader#maxDoc进行迭代,并查询bitset以了解docid是代表已删除的文档还是实时的文档。您可以像访问现有文档一样访问已删除文档的所有存储字段。

但是,一旦段合并,其已删除的文档将被永久删除,从而从索引中删除。

答案 1 :(得分:1)

这是不可能的。当您从Lucene索引中删除文档时,它不会立即删除,因为重建所有索引是如此昂贵。这个旧文档被标记为在索引优化上最终删除。但它不再可见了。它只是在Lucene的内部可见。如果删除文档并提交,则永远不会再获取文档。