哎呀!
这是“纯 Java”Lucene,但它很可能适用于其他品种。
在 Lucene 4.0.0 中,APIDirectoryReader.indexExists()
说
如果指定目录中存在索引,则返回 true。
但是在 Lucene 4.10.2 中,APIDirectoryReader.indexExists()
说
如果指定目录中可能存在索引,则返回 true。请注意,如果存在损坏的索引,或者正在提交的索引
...是的,它在句子中间中断。注意我直接从源代码编译了我的 Javadoc,但是在在线 API 中可以看到相同的未完成短语。不仅如此,我查看了Lucene 6.0.0 API,也完全一样。
然而,“返回”短语是:
如果存在索引,则为 true;否则为假
...但我目前相信一个空目录有时会(?)返回true
(来自我的单元测试)。反正我是不会相信的。
如果您IndexReader
在空目录上创建一个,它的所有方法似乎都将返回而不会引发异常。你可以 go indexReader.numDocs()
,这将返回 0,但这并不能证明那里没有索引,只能证明没有Document
s。当然,根据您的要求,这可能就足够了。
同样,您可以IndexSearcher
从这样的 中创建一个IndexReader
,并且您可以创建一个IndexWriter
. 这些都不会对空目录有任何明显的问题。
更好的解决方案:
try {
directoryReader = DirectoryReader.open( fsDir );
} catch ( org.apache.lucene.index.IndexNotFoundException e) {
...
}
据我所知,这似乎是可靠的。