Ой!
Это «чистая Java» Lucene, но она вполне может относиться к другим разновидностям.
В Lucene 4.0.0 API для DirectoryReader.indexExists() говорит
Возвращает истину, если индекс существует в указанном каталоге.
Но в Lucene 4.10.2 API для DirectoryReader.indexExists() говорит
Возвращает истину, если индекс, вероятно, существует в указанном каталоге. Обратите внимание: если существует поврежденный индекс или индекс находится в процессе фиксации
... да, это обрывается на середине предложения. NB Я скомпилировал свою Javadoc прямо из источника, но ту же незаконченную фразу можно увидеть в онлайн-API. Не только это, но я посмотрел на API Lucene 6.0.0, и он точно такой же.
Однако фраза «возвращает»:
истина, если индекс существует; ложь иначе
... но в настоящее время я считаю, что пустой каталог иногда (?) возвращает true (из моего модульного тестирования). В любом случае, я бы этому не поверил.
Если вы создаете IndexReader в пустом каталоге, кажется, что все его методы вернутся без исключения исключений. Вы можете пойти indexReader.numDocs(), и это вернет 0, но это не доказывает, что там нет индекса, а только то, что нет Documents. Конечно, в зависимости от ваших требований этого может быть достаточно.
Точно так же вы можете создать IndexSearcher из такого IndexReader, а можете создать IndexWriter. Ни у одного из них не будет явных проблем с пустым каталогом.
ЛУЧШЕЕ РЕШЕНИЕ:
try {
directoryReader = DirectoryReader.open( fsDir );
} catch ( org.apache.lucene.index.IndexNotFoundException e) {
...
}
Насколько я могу судить, это кажется надежным.
person
mike rodent
schedule
03.11.2016