我有兩個Lucene索引,我試圖用Lucene 4.X中的ParallelCompositeReader一起打開。兩個索引都按相同的順序包含相同數量的文檔(14365790)。我的代碼如下所示:我該如何解決Lucene並行讀取器錯誤「所有讀者必須具有相同數量的子讀取器」?
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
是什麼或如何使它們在兩個指標中相同。很可能這不是關鍵問題,或者我的問題有更好的解決方案。