おっと!
これは「ストレート Java」の Lucene ですが、他の種類にも当てはまる可能性があります。
Lucene 4.0.0 では、API はDirectoryReader.indexExists()
言う
指定したディレクトリにインデックスが存在する場合は true を返します。
しかし、Lucene 4.10.2 の APIDirectoryReader.indexExists()
は
指定されたディレクトリにインデックスが存在する可能性がある場合は true を返します。破損したインデックスが存在する場合、またはインデックスがコミット中の場合は注意してください。
...はい、文の途中で途切れます。注意: Javadoc をソースから直接コンパイルしましたが、同じ未完成のフレーズがオンライン API に見られます。それだけでなく、Lucene 6.0.0 API を見てみましたが、まったく同じです。
ただし、「返品」句は次のとおりです。
インデックスが存在する場合は true 。それ以外の場合は false
...しかし、現在、空のディレクトリが時々(?)返されると信じていますtrue
(ユニットテストから)。とにかく、私はそれを信用しません。
空のディレクトリにを作成するIndexReader
と、そのすべてのメソッドが例外をスローせずに返されるように見えます。あなたは行くことができindexReader.numDocs()
、これは0を返しますが、それはそこにインデックスがないことを証明するものではなく、Document
sがないことだけを証明しています. もちろん、要件によってはそれで十分かもしれません。
同様に、IndexSearcher
そのような からを作成したりIndexReader
、 を作成したりできますIndexWriter
。これらのいずれも、空のディレクトリに明らかな問題はありません。
より良い解決策:
try {
directoryReader = DirectoryReader.open( fsDir );
} catch ( org.apache.lucene.index.IndexNotFoundException e) {
...
}
私が知る限り、これは信頼できるようです。