Oups!
Ceci est le "droit Java" Lucene, mais il peut très bien s'appliquer à d'autres variétés.
Dans Lucene 4.0.0 l'API pour DirectoryReader.indexExists()
dit
Renvoie true si un index existe dans le répertoire spécifié.
Mais dans Lucene 4.10.2 l'API pour DirectoryReader.indexExists()
dit
Renvoie true si un index existe probablement dans le répertoire spécifié. Notez que si un index existe corrompu, ou si un indice dans le processus de commettre
... oui, il se brise la mi-peine. NB J'ai compilé mon Javadoc directement à partir de la source, mais la même phrase inachevée peut être vue dans l'API en ligne. Non seulement cela, mais j'ai regardé l'API Lucene 6.0.0, et c'est exactement la même chose.
Le terme "revenus" phrase est cependant:
true si un index existe; false sinon
... mais je crois actuellement qu'un répertoire vide retournera parfois (?) true
(à partir de mes tests unitaires). De toute façon, je ne le ferais pas confiance.
Si vous créez un IndexReader
sur un répertoire vide, il semble que toutes ses méthodes retourneront sans lancer des exceptions. Vous pouvez aller indexReader.numDocs()
, et cela retournera 0, mais cela ne prouve pas qu'il n'y a pas d'index là-bas, seulement qu'il n'y a pas Document
s. En fonction de vos besoins, cela pourrait être suffisant, bien sûr.
De même, vous pouvez créer un IndexSearcher
à partir d'un tel IndexReader
, et vous pouvez créer un IndexWriter
. Aucun d'entre eux n'aura de problème apparent avec un répertoire vide.
meilleure solution:
try {
directoryReader = DirectoryReader.open(fsDir);
} catch (org.apache.lucene.index.IndexNotFoundException e) {
...
}
Cela semble, pour autant que je peux dire, pour être fiable.
Lucene.net n'a pas cette surcharge. – Marek
Quelle version de Lucene.Net manque la surcharge? C'est là en 2.4. –
J'utilise le "straight Java" Lucene. 'IndexWriter' dans 4.10. + N'a qu'un seul constructeur. Mais je ne comprends pas comment vous pouvez obtenir ce que le questionneur voulait de votre solution: savoir s'il existe déjà un index. –