我试图从Lucene Index获取所有文件(已经没有删除)。
我听说如果我从Lucene Index中删除一些东西,Lucene就不会立即从文件中删除。
所以我想从索引文件中获取未删除的文件。
答案 0 :(得分:2)
Lucene提供了所有未删除文档的位集,称为liveDocs
。您可以iterating通过所有LeafReader
(或使用SlowCompositeReaderWrapper
)并调用liveDocs
方法或使用MultiFields
类来获取它。
一旦有了这个bitset,你可以从0
到IndexReader#maxDoc
进行迭代,并查询bitset以了解docid是代表已删除的文档还是实时的文档。您可以像访问现有文档一样访问已删除文档的所有存储字段。
但是,一旦段合并,其已删除的文档将被永久删除,从而从索引中删除。
答案 1 :(得分:1)
这是不可能的。当您从Lucene索引中删除文档时,它不会立即删除,因为重建所有索引是如此昂贵。这个旧文档被标记为在索引优化上最终删除。但它不再可见了。它只是在Lucene的内部可见。如果删除文档并提交,则永远不会再获取文档。