Question

Dans mon projet, nous utilisons Lucene 2.4.1 pour la recherche en texte intégral. Ceci est un projet J2EE, IndexSearcher est créé une fois. En arrière-plan, l'index est actualisé toutes les deux minutes (lorsque le contenu change). Les utilisateurs peuvent rechercher l'index via un mécanisme de recherche sur la page.

Le problème, c’est que les résultats renvoyés par Lucene semblent être cachés d’une manière ou d’une autre.

C’est le scénario que j’ai remarqué:

  • Je lance l'application et recherche "mot clé" - 6 résultats sont renvoyés,
  • L'index est actualisé en utilisant Luke Je vois qu'il existe 8 résultats pour interroger le mot clé ',
  • Je cherche à nouveau à l'aide de l'application, à nouveau 6 résultats sont renvoyés.

J'ai analysé notre configuration et je n'ai trouvé aucune mise en cache, où que ce soit. J'ai débogué la recherche et il n'y a pas de mise en cache dans le code, searcher.search renvoie 6 résultats.

Lucene met-elle en cache les résultats en interne? Quelles propriétés etc. devrais-je vérifier?

Était-ce utile?

La solution

Pour voir les modifications apportées par IndexWriters par rapport à un index pour lequel vous avez un IndexReader ouvert, appelez IndexReader.reopen () pour voir les dernières modifications.

Assurez-vous également que votre IndexWriter valide les modifications, via une validation explicite (), une clôture () ou si autoCommit est défini sur true.

Autres conseils

Avec les versions antérieures à la version 2.9.0, Lucene mettait automatiquement en cache les résultats des requêtes. Avec les versions ultérieures, il n'y a pas de mise en cache sauf si vous encapsulez votre requête dans un QueryFilter, puis le résultat dans un CachingWrapperFilter. Vous pouvez envisager de passer à une version > = 2.9.0 si la réouverture de l'index pose un problème

Encore une remarque: pour rechercher dans IndexReader les documents mis à jour des autres threads en temps réel, lors de l’initialisation d’IndexReader, le paramètre "lecture seule" " doit être faux. Sinon, la méthode reopen () ne fonctionnera pas.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top