¡Vaya!
Este es un Lucene "recto de Java", pero bien puede aplicarse a otras variedades.
En Lucene 4.0.0 del API para DirectoryReader.indexExists()
dice
devuelve verdadero si existe un índice en el directorio especificado.
Pero en Lucene 4.10.2 del API para DirectoryReader.indexExists()
dice
devuelve verdadero si el índice es probable que exista en el directorio especificado. Tenga en cuenta que si existe un índice dañado, o si un índice en el proceso de cometer
... sí, se rompe a mitad de la frase. NB He compilado mi Javadoc directamente desde la fuente, pero la misma frase inacabada se puede ver en la API en línea. No solo eso, sino que miré la API de Lucene 6.0.0, y es exactamente lo mismo.
La frase "ganancias" es, sin embargo:
cierto si existe un índice; falso de lo contrario
... pero actualmente creo que un directorio vacío a veces (?) devolverá true
(de mi prueba unitaria). De todos modos, no confiaría en eso.
Si crea un IndexReader
en un directorio vacío, parece que todos sus métodos volverán sin arrojar excepciones. Puede ir al indexReader.numDocs()
, y esto devolverá 0, pero eso no prueba que no haya ningún índice allí, solo que no hay Document
s. Dependiendo de sus requisitos, eso podría ser suficiente, por supuesto.
Del mismo modo, puede crear un IndexSearcher
a partir de un IndexReader
, y puede crear un IndexWriter
. Ninguno de estos tendrá ningún problema aparente con un directorio vacío.
MEJOR SOLUCIÓN:
try {
directoryReader = DirectoryReader.open(fsDir);
} catch (org.apache.lucene.index.IndexNotFoundException e) {
...
}
Esto aparece, por lo que yo puedo decir, son totalmente fiables.
Lucene.net no tiene esta sobrecarga. – Marek
¿Qué versión de Lucene.Net no tiene la sobrecarga? Está ahí en 2.4. –
Estoy usando el Lucene "directo de Java". 'IndexWriter' en 4.10. + Solo tiene un constructor. Pero no entiendo cómo puede obtener lo que el interlocutor quería de su solución: averigüe si ya hay un índice allí. –