我有两个 Lucene 索引,我正在尝试与 Lucene 4.X 中的 ParallelCompositeReader 一起打开它们。两个索引以相同的顺序包含相同数量的文档 (14365790)。我的代码如下所示:
val articlesReader = DirectoryReader.open(FSDirectory.open(...))
val citationCountReader = DirectoryReader.open(FSDirectory.open(...))
val reader = new ParallelCompositeReader(articlesReader, citationCountReader)
当我运行此代码时,我收到以下错误:
Exception in thread "main" java.lang.IllegalArgumentException: All readers must have same number of subReaders
at org.apache.lucene.index.ParallelCompositeReader.validate(ParallelCompositeReader.java:147)
at org.apache.lucene.index.ParallelCompositeReader.prepareSubReaders(ParallelCompositeReader.java:100)
at org.apache.lucene.index.ParallelCompositeReader.<init>(ParallelCompositeReader.java:71)
at org.apache.lucene.index.ParallelCompositeReader.<init>(ParallelCompositeReader.java:64)
at org.apache.lucene.index.ParallelCompositeReader.<init>(ParallelCompositeReader.java:58)
关于索引的一些信息:
articlesReader 索引包含每篇文章的标题、摘要和出版年份等信息。它是几年前由其他人使用 Lucene 3.X 创建的。重新创建非常大且耗时,所以如果可能的话,我宁愿不修改它
citationCountReader 索引包含每篇文章的引用计数。它是通过遍历articlesReader 创建的。这是一个 Lucene 4.X 索引。这个只需要几个小时来重新创建,所以如果我必须重新创建任何东西,我宁愿修改这个。(当然,我也不想重新创建。)
我对 ParallelCompositeReader 的源代码进行了一些研究,似乎抛出了这个错误,因为.getSequentialSubReaders()
返回一个大小为 1 的articlesReader
列表,但返回一个大小为 3 的列表citationCountReader
。但我不知道什么SequentialSubReaders
是或如何使它们在两个索引中相同。这很可能不是关键问题和/或我的问题有更好的解决方案。