IndexNotFoundException - IndexSearcherが空のRAMDirectoryを呼び出す場合

# some java_imports here
index = RAMDirectory.new
IndexWriter.new(index, StandardAnalyzer.new(Version::LUCENE_30), IndexWriter::MaxFieldLength::UNLIMITED )
IndexSearcher.new(index)

生成する

NativeException: org.apache.lucene.index.IndexNotFoundException: no segments* file found in [email protected] [email protected]d07bb: files: []

なぜこれが起こるのですか?

6
パックマンによる3.4.0
追加された 著者 Reactormonk,
Luceneのどのバージョンを使用していますか? Lucene 3.0.3(最新の3.0リリース)を使用して問題を再現することはできません。
追加された 著者 jpountz,

2 答え

IndexSearcherは、セグメントが書き込まれていないため(IndexWriterにドキュメントを追加するとき、メモリにキューイングされたとき、使用されたメモリの量が所定のしきい値に達したとき、またはcommitこれらのメモリ内データ構造はディスクにフラッシュされ、Luceneがセグメントと呼ぶものになります)。

あなたがする必要があることは、IndexSearcherを開く前にコミットを呼び出して明示的にセグメントを作成することです。

index = RAMDirectory.new
writer = IndexWriter.new(index, StandardAnalyzer.new(Version::LUCENE_30),IndexWriter::MaxFieldLength::UNLIMITED)
writer.commit()
IndexSearcher.new(index)

さらに、このIndexWriterコンストラクタはLucene 3.4では非推奨です。IndexWriterを使用してIndexWriterを構成する必要があります。

iwConfig = IndexWriterConfig.new(Version::LUCENE_34, StandardAnalyzer.new(Version::LUCENE_34))
writer = IndexWriter.new(index, iwConfig)
11
追加された

明示的なコミットを呼び出す代わりに、明示的にコミットしてlucene 4のリソースを閉じるべきIndexWriterを閉じることができます

0
追加された