0

Lucene4.XでParallelCompositeReaderと一緒に開こうとしている2つのLuceneインデックスがあります。両方のインデックスには、同じ数のドキュメント(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を反復処理することによって作成されました。これはLucene4.Xインデックスです。これは再作成に数時間しかかからないので、何かを再作成する必要がある場合は、これを変更したいと思います。(もちろん、私も再作成する必要はありません。)

ParallelCompositeReaderのソースを少し掘り下げましたが、.getSequentialSubReaders()の場合はサイズ1のリストが返されますarticlesReaderが、の場合はサイズ3のリストが返されるため、このエラーがスローされるようですcitationCountReaderSequentialSubReadersしかし、2つのインデックス間でそれらを同じにする方法や方法はわかりません。そして、これが重要な問題ではない、および/または私の問題に対するより良い解決策がある可能性は十分にあります。

4

1 に答える 1

1

問題は、2 つのインデックスのセグメント数が異なることでした。そのため、複数のセグメントを持つインデックスを強制的に 1 つのセグメントにマージする必要がありました。これが私がしたことです:

val config = new IndexWriterConfig(Version.LUCENE_40, ...)
config.setOpenMode(IndexWriterConfig.OpenMode.APPEND)
val indexWriter = new IndexWriter(FSDirectory.open(...), config)
indexWriter.forceMerge(1)
indexWriter.close

両方のインデックスが 1 つのセグメントを持つ.getSequentialSubReaders()と、両方のリーダーに対してサイズ 1 のリストが返され、ParallelCompositeReader はそれらをロードできました。

于 2012-09-10T07:47:59.987 に答える