Question

J'utilise actuellement Lucene.net dans une application Web et je m'interroge sur la meilleure méthode en termes de performances.

Je l'ai actuellement configuré pour que toutes les écritures d'index soient traitées ensemble dans un processus planifié, avec l'optimisation de l'index.

Toutefois, pour effectuer une recherche, j'ouvre et ferme le moteur de recherche par recherche, ce qui, à mon avis, n'est pas idéal.

Quelle serait selon vous la meilleure approche dans cette situation?

Je devrai fermer et rouvrir le moteur de recherche d'index une fois les mises à jour / l'optimisation traitées afin que le processus planifié (qui est une application de console Windows) ait besoin de communiquer son exécution à l'application Web.

Était-ce utile?

La solution

Je viens d’intégrer Lucene.NET dans BugTracker.NET. Je ne suis pas sûr que ce que j'ai fait soit le meilleur, mais cela semble bien fonctionner.

Je crée l'index au démarrage de l'application.

Je crée un moteur de recherche et le conserve afin que l'index ne soit pas rechargé à chaque recherche. Tous les threads partagent le même chercheur. Lorsque le chercheur cherche, il attrape un verrou.

En attendant, j'ai un IndexWriter qui met à jour l'index en cas de modification des données. Il est juste en train de changer un peu afin que sa tâche soit rapide. Lorsqu'il est exécuté, il récupère le même verrou, détruit le chercheur, met à jour l'index et le recrée à nouveau. Le nouveau chercheur reste en place jusqu'à la prochaine mise à jour de l'index. Le chercheur travaille toujours avec un index à jour.

Vous pouvez obtenir la source BugTracker.NET et consulter les fichiers my_lucene.cs et search_text.aspx. Tout est dans ces deux fichiers et il n’ya pas beaucoup de code.

Autres conseils

Vous pouvez appeler la méthode IsCurrent () du lecteur pour vérifier si une nouvelle version de l'index est disponible et si elle est ensuite rouverte. Ce n’est peut-être pas la meilleure solution, mais c’est assez simple et si vos exigences ne sont pas très grandes, elles seront suffisantes.

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