2009-05-11 3 views
2

Vor AddDocument() auf IndexWriter anrufen, ist es in Ordnung, wenn ichMit IndexReader IsLocked und Entsperren Methoden

IndexReader.IsLocked(myDirectory) 

nennen und wenn es wahr zurückgibt, rufen Sie dann

IndexReader.Unlock(myDirectory) 

dh

if(IndexReader.IsLocked(myDirectory)) 
{ 
IndexReader.Unlock(myDirectory); 
} 

writer = new IndexWriter(myDirectory, _analyzer, true); 
writer.AddDocument(doc); 

Ich bekomme immer "Zeitlimit für die Sperre erhalten". Fehler in meinem Code. Um diesen Fehler zu beheben, plane ich diesen Ansatz, wenn es in Ordnung ist.

Antwort

3

Wenn Sie den Fehler "Zeitlimit für die Sperre erhalten" erhalten, ist dies ein Warnsignal dafür, dass bei der Verarbeitung des Indexes ein Fehler aufgetreten ist. Wenn Sie mehr als einen IndexWriter in den Index schreiben, würde das Erzwingen der Entsperrung wahrscheinlich dazu führen, dass Ihr Index beschädigt wird.

Nach meiner Erfahrung ist es jedoch leicht, diese Fehler zu bekommen, wenn Sie an dem Code arbeiten, da gelegentliche Abstürze und unterbrochene Debugsitzungen den Index gesperrt lassen, obwohl kein Prozess mehr schreibt.

Wenn dies der Fall ist, ist es in Ordnung, den Index zu Beginn des Prozesses zu entsperren. Nennen Sie es nicht jedes Mal vor dem Anruf addDocument, nur einmal beim Erstellen der IndexWriter.

Vergewissern Sie sich in jedem Fall, dass Sie alle IndexWriter ordnungsgemäß geschlossen haben, bevor Sie den Prozess beenden.

+0

Dank für ur wertvolle Inputs ... bin ein Neuling auf Lucene ... einfach Ich wollte die Dinge wissen, um die ich mich kümmern muss, wenn ich die Lucene-Such-API über eine Webanwendung offenlege, bei der gleichzeitige Benutzer den Lucene-Index gleichzeitig aktualisieren können. –

0

Wichtiger Punkt zu erinnern mit Lucene, sollte nur ein Thread den Index aktualisieren ... so gibt es gleichzeitige Benutzer auf der Website, aber nur ein Benutzer sollte aktualisiert werden.

Wenn Sie damit umgehen nicht richtig, werden Sie auf Probleme stoßen ... Sie haben mehrere liest/Abfragen, aber nicht schreibt

+0

danke für deine Kommentare ... kannst du bitte Schau auch in diesen? http://stackoverflow.com/questions/899542/problem-verwenden-same-instance-of-indexsearcher-for-multiple-requests –