【问题标题】:Lucene get all non deleted document from index fileLucene 从索引文件中获取所有未删除的文档
【发布时间】:2015-06-10 16:14:31
【问题描述】:

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

听说如果我从 Lucene Index 中删除某些内容,Lucene 不会立即从文件中删除。

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

【问题讨论】:

标签: java indexing lucene


【解决方案1】:

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

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

但是,一旦一个段被合并,它被删除的文档就会被永久删除,从而从索引中删除。

【讨论】:

  • 感谢@knutwalker .. 合并片段对我有用。
【解决方案2】:

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

【讨论】:

  • 提交后我也得到了文件。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-11-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-12
  • 2019-06-02
相关资源
最近更新 更多