4

试图将一些 Lucene 3 代码转换为 Lucene 4,

我想使用 termEnums.docs(ir.getLiveDocs()) 仅返回未针对特定术语删除的文档。但是 getLiveDocs() 仅适用于 AtomicReader,虽然我只有一个索引,但它是基于文件的并使用 DirectoryReader(它是 CompositeReader 的子类)。

所以我想我可以使用 SlowCompositeReaderWrapper 但这个名字阻止了我,但我不明白的是,不是几乎每个人都使用基于文件系统的索引,不是几乎每个人都使用 CompositeReaders 吗?

然而文档似乎暗示我们应该使用 AtomicReaders 但我不明白如何使用基于文件的索引来做到这一点,也许如果基于文件的索引只有一个段,但不是由 Lucene 创建的段,因为它需要它们,并且通常不受最终用户应用程序的密切控制。

4

1 回答 1

6

好问题。这可能是从 lucene 3 迁移到 lucene 4 时弹出的最常见的情况。先看看这篇文章,它解释了重构背后的原因。

基本上,一切都是 lucene 中的每个片段,但一些 lucene 3 API 没有反映这一点。in lucene 3暴露的一些方法IndexReader只是合并了所有段的大量信息,做的很慢,这就是SlowCompositeReaderWrapper. 我们的想法是从每个细分市场中获取您需要的信息并自行合并。AnAtomicReader使您可以访问单个段,而 theCompositeReader是整个索引的视图,它不会公开过去可用的所有方法IndexReader

于 2013-04-24T18:44:30.680 回答