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é.

Était-ce utile?

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 DirectoryReader.indexExists() indique

  

Renvoie true si un index existe dans le répertoire spécifié.

Mais dans Lucene 4.10.2, l'API pour true dit

  

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 IndexReader (de mes tests unitaires). De toute façon, je n'y croirais pas.

Si vous créez un 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.

De même, vous pouvez créer un 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.

MEILLEURE SOLUTION:

    try {
        directoryReader = DirectoryReader.open( fsDir );
    } catch ( org.apache.lucene.index.IndexNotFoundException e) {
        ...
    }

Cela semble, pour autant que je sache, fiable.

scroll top