Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何修复Lucene并行读取器错误;所有读卡器必须具有相同数量的子读卡器;?_Lucene - Fatal编程技术网

如何修复Lucene并行读取器错误;所有读卡器必须具有相同数量的子读卡器;?

如何修复Lucene并行读取器错误;所有读卡器必须具有相同数量的子读卡器;?,lucene,Lucene,我有两个Lucene索引,我正试图用Lucene 4.X中的ParallelCompositeReader一起打开。两个索引包含相同数量的文档(14365790),顺序相同。我的代码如下所示: val articlesReader = DirectoryReader.open(FSDirectory.open(...)) val citationCountReader = DirectoryReader.open(FSDirectory.open(...)) val reader = new P

我有两个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)
线程“main”java.lang.IllegalArgumentException中的异常:所有读卡器必须具有相同数量的子读卡器 位于org.apache.lucene.index.ParallelCompositeReader.validate(ParallelCompositeReader.java:147) 位于org.apache.lucene.index.ParallelCompositeReader.prepareSubReaders(ParallelCompositeReader.java:100) 位于org.apache.lucene.index.ParallelCompositeReader.(ParallelCompositeReader.java:71) 位于org.apache.lucene.index.ParallelCompositeReader(ParallelCompositeReader.java:64) 位于org.apache.lucene.index.ParallelCompositeReader(ParallelCompositeReader.java:58) 有关索引的一些信息:

  • articlesReader索引包含每篇文章的标题、摘要和发表年份等信息。它是几年前由其他人使用Lucene 3.X创建的。重新创建它非常大而且耗时,所以如果可能的话,我不想修改它

  • 引文计数读者索引包含每篇文章的引文计数。它是通过迭代articlesReader创建的。这是一个Lucene 4.X索引。这一个只需要几个小时来重新创建,所以如果我必须重新创建任何东西,我更愿意修改这一个。(当然,我也不想重新创建。)


我深入研究了ParallelCompositeReader的源代码,似乎抛出了这个错误,因为
.getSequentialSubReaders()
articlesReader
返回一个大小为1的列表,但为
引文计数阅读器返回一个大小为3的列表。但我不知道什么是
SequentialSubReaders
,也不知道如何在两个索引中使它们相同。很可能这不是关键问题,或者我的问题有更好的解决方案。

好的,问题是这两个索引的段数不同。因此,我不得不强制将索引与多个段合并为一个段。以下是我所做的:

val config = new IndexWriterConfig(Version.LUCENE_40, ...)
config.setOpenMode(IndexWriterConfig.OpenMode.APPEND)
val indexWriter = new IndexWriter(FSDirectory.open(...), config)
indexWriter.forceMerge(1)
indexWriter.close
一旦两个索引都有一个段,那么
.getSequentialSubReaders()
为两个读卡器返回一个大小为1的列表,并且ParallelCompositeReader能够加载它们