Comment identifier si un index Lucene.Net existe dans un dossier?
-
05-07-2019 - |
Question
J'utilise Lucene.Net pour l'indexation et la recherche de documents, et j'utilise le code suivant pour créer ou ouvrir un index, s'il en existe un:
IndexWriter writer = new IndexWriter(@"C:\index", new StandardAnalyzer(), !IndexExists);
...
private bool IndexExists
{
get
{
return ??
}
}
Maintenant, comment implémenter IndexExists
de manière simple? Je n'ai besoin d'aucune exception pour être levé.
La solution
La méthode statique IndexReader.IndexExists (chemin de chaîne) (ou l'une de ses surcharges) semble bien convenir.
Autres conseils
Dans < 4.0 est IndexReader.indexExists(org.apache.lucene.store.Directory)
Dans > 4.0 est DirectoryReader.indexExists(org.apache.lucene.store.Directory)
Vous pouvez simplement utiliser le constructeur qui ne prend pas de paramètre booléen. Cela ouvrira un index existant s’il en existe un ou en créera un nouveau s’il n’existe pas.
Lien vers la documentation Java (idem pour Lucene.Net): http://lucene.apache.org/java/2_3_1/api/org/apache/lucene/index/IndexWriter.html#IndexWriter(org.apache.lucene.store.Directory, org.apache.lucene.analysis.Analyzer)
J'essaie aussi de trouver cette réponse sans succès et voici comment j'ai utilisé mon code:
bool privé IndexExists { obtenir { return IndexDirectory.FileExists (" segments.gen "); } }
Je sais que c’est une vieille entrée, mais ce que Sean Carpenter a écrit est tout à fait vrai et ce constructeur existe même dans la dernière version de Lucene .NET. La documentation de la classe IndexWriter peut être trouvée ici:
Oups! Ceci est " straight Java " Lucene, mais cela pourrait s’appliquer à d’autres variétés. Dans Lucene 4.0.0, l’API pour Renvoie true si un index existe dans le répertoire spécifié. Mais dans Lucene 4.10.2, l'API pour Renvoie true si un index existe probablement dans le répertoire spécifié.
Notez que si un index corrompu existe ou si un index en cours de
commettre ... oui, cela interrompt la phrase. NB J'ai compilé ma Javadoc directement à partir de la source, mais la même phrase inachevée est visible dans l'API en ligne. De plus, j’ai jeté un œil à l’API Lucene 6.0.0, qui est exactement la même chose. Le " retourne " la phrase est cependant: true si un index existe; faux sinon ... mais je crois actuellement qu'un répertoire vide va parfois (?) retourner Si vous créez un De même, vous pouvez créer un MEILLEURE SOLUTION: Cela semble, pour autant que je sache, fiable. DirectoryReader.indexExists()
indique
true
dit
IndexReader
(de mes tests unitaires). De toute façon, je n'y croirais pas. indexReader.numDocs()
sur un répertoire vide, il semble que toutes ses méthodes renverront sans exception. Vous pouvez aller Document
, et cela retournera 0, mais cela ne prouve pas qu'il n'y a pas d'index, mais qu'il n'y a pas de IndexSearcher
s. En fonction de vos besoins, cela peut suffire, bien sûr. IndexWriter
à partir d'un tel <=>, et vous pouvez créer un <=>. Aucun de ceux-ci n'aura de problème apparent avec un répertoire vide. try {
directoryReader = DirectoryReader.open( fsDir );
} catch ( org.apache.lucene.index.IndexNotFoundException e) {
...
}