2009-10-14 7 views
0

Afin de garder mon index à jour, j'ai besoin d'ajouter/modifier mon index de recherche toutes les 5 minutes. La façon dont je l'ai mis en place est avec 2 index, un dans le répertoire complet et un dans le répertoire Incremental, et pour les rechercher, j'utilise un MultiSearcher.Lucene.Net maintien des index lors de l'utilisation de MultiSearcher

J'écris maintenant un processus pour maintenir l'index. Ce que je fais est de passer la dernière date d'index à une procédure stockée et la base de données retourne tous les enregistrements nouveaux/modifiés basés sur un champ "UpdatedOn" dans la base de données. Je boucle ensuite à travers les 2 répertoires, en ouvrant un IndexReader pour chaque répertoire et en supprimant le document basé sur un TermQuery pour la clé primaire. J'ajoute ensuite les enregistrements à l'index incrémental en utilisant un IndexWriter et je l'optimise.

Que se passe-t-il lorsque je fais des recherches ultérieures est que les enregistrements que je sais sont dans l'index ne sont pas retournés.

Est-ce que la maintenance de l'index est incorrecte?

Répondre

1

Votre {Multi} IndexSearcher est-il fermé et rouvert sur l'interface de recherche? Pour des raisons de performances, j'ai vu certaines applications conserver l'objet SearchIndexer en mémoire pour éviter la surcharge de réouverture de l'objet et de son répertoire sous-jacent à chaque recherche. Cependant, IndexSearcher ne prend pas en compte les modifications/ajouts à l'indice sous-jacent. Je ne suis pas sûr si c'est ce qui se passe dans votre cas - mais généralement quand j'ai vu un chercheur ne pas prendre de nouveaux documents, c'est parce que le chercheur a été ouvert avant que l'élément a été ajouté à l'index. .. juste une pensée.

+0

Oui, je ferme le IndexSearcher après chaque recherche. – druta