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

Lucene get all non deleted document from index file

我正在尝试从 Lucene Index(尚未删除)获取所有文档。

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

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

这不可能。当您从 Lucene 索引中删除一个文档时,它不会立即被删除,因为重建所有索引的成本非常高。这个旧文档被标记为在索引优化时明确删除。但它不再可见了。它只是在 Lucene 内部可见。如果您删除了一个文档并提交了它,它就再也无法获取了。

Lucene 提供了所有未删除文档的位集,称为liveDocs。可以通过iterating over all LeafReaders (or using the SlowCompositeReaderWrapper) and calling the liveDocs method or by using the MultiFieldsclass.

获取

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

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