在Lucene 4中,AtomicReader和CompositeReader之间的区别是什么

Pau*_*lor 4 java lucene

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

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

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

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

jav*_*nna 6

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

基本上一切都是lucene中的每个段,但是一些lucene 3 API没有反映出这一点.IndexReaderlucene 3中暴露的一些方法只是合并了来自所有细分的大量信息并做了很慢的事情,这就是命名的原因SlowCompositeReaderWrapper.我们的想法是从每个细分中获取您需要的信息并自行合并.An AtomicReader允许您访问单个段,而它CompositeReader是整个索引的视图,它不会公开以前可用的所有方法IndexReader.