Pourquoi mon index Lucene les enfermer?
J'ai eu un problème avec ma recherche retourne pas les résultats que j'attends.
J'ai essayé d'exécuter Luc sur mon index, mais il a dit qu'il a été verrouillé et j'ai besoin de Forcer le Déverrouiller (je ne suis pas un Jedi/Sith)
J'ai essayé de supprimer le dossier de l'index et de gérer mon de recréer-indicies de l'application, mais le dossier a été verrouillé. À l'aide de unlocker j'ai trouvé qu'il y a environ 100 entrées de w3wp.exe (même PID, différentes Poignée) avec un verrou sur l'index.
Ce qui se passe?
Je fais cela dans mon NHibernate configuration:
c.SetListener(ListenerType.PostUpdate, new FullTextIndexEventListener());
c.SetListener(ListenerType.PostInsert, new FullTextIndexEventListener());
c.SetListener(ListenerType.PostDelete, new FullTextIndexEventListener());
Et ici est le seul endroit où j'ai une requête à l'index:
var fullTextSession = NHibernate.Search.Search.CreateFullTextSession(this.unitOfWork.Session);
var fullTextQuery = fullTextSession.CreateFullTextQuery(query, typeof (Person));
fullTextQuery.SetMaxResults(100);
return fullTextQuery.List<Person>();
Ce qui se passe? Ce que je fais mal?
Grâce
OriginalL'auteur Andrew Bullock | 2010-02-26
Vous devez vous connecter pour publier un commentaire.
L'Lucene.Net index uniquement des blocs simultanées écrire opérations sur les index. Vous pouvez avoir autant de threads que vous le souhaitez à la recherche /lecture de l'index et ils l'habitude de bloc - soit les uns sur les autres ou sur toute personne faisant une écriture, toutefois, si vous avez deux fils de faire une écriture sur l'index en même temps, puis il ya une chance que l'un d'eux se bloque sur l'autre.
Si lucene vous dit que votre index est verrouillé, cela signifie que quelqu'un est en train d'écrire à l'index, ou (ce qui semble le plus probable) quelque chose qui a été écrit à l'index a été tué lors de l'écriture et donc ne pouvait pas supprimer le verrouillage. Vous devez vous assurer que vous débarrasser correctement de tous Les objets qui écrivent à l'index dès qu'ils sont terminés.
Pour supprimer le verrou manuellement, il y a un .verrouillage de fichier que vous souhaitez supprimer à l'intérieur de la Lucene répertoire (mon grand livre de Lucene n'est pas près de moi à l'instant, donc je ne sais pas exactement où c'est, mais faire une recherche pour "verrouiller" ou ".verrouiller" dans la Lucene répertoire devrait le trouver)
Les poignées qui w3wp.exe sur ce annuaire ont été probablement les poignées détenue par les threads de lecture à partir de l'index lucene - bien que ces va vous empêcher de supprimer le répertoire, ils ne devraient pas vous empêcher de la recherche ou de l'écriture à l'index.
hmmm regardant le source il ne semble pas prendre le filetage en compte (ne signifie pas que sa bug gratuit). Toutes les suggestions sur comment je peut corriger cela? Je ne vois pas de raison (dans mon code), pour un indice écrire à l'échec
OriginalL'auteur Justin
Supprimer "de l'écriture.verrouillage de fichier" dans le dossier de l'index.
Vérifier les opérations d'écriture. @Kragen mentionné, il est plus probable, votre indice de l'opération d'écriture résilié de gauche et de l'écriture.fichier de verrouillage. Je voudrais commencer par la suppression d'écrire.verrouillage et voir si il obtient recréé; si oui, alors je veux le regarder pour les processus d'accès à l'index.
OriginalL'auteur Mikos
Ressemble à cette question faisait l'
http://www.interworks.com/blogs/banderton/2009/07/09/nhibernatesearch-threading-issues-or-maybe-not
OriginalL'auteur Andrew Bullock