2009-05-11 1 views
0

Ich habe eine Linie in meinem Lucene Code:Closing indexreader

try 
{ 
    searcher.GetIndexReader(); 
} 
catch(Exception ex) 
{ 
    throw ex; 
} 
finally 
{ 
    if (searcher != null) 
    { 
     searcher.Close(); 
    } 
} 

In meiner finally, wenn ich ausführen searcher.Close(), wird es auch ausführen searcher.GetIndexReader() In der Nähe hinter den Kulissen. ?

Oder muss ich explizit searcher.GetIndexReader() aufrufen. Close() - Methode zum Schließen von IndexReader ??

Danke fürs Lesen.

Antwort

2

Entschuldigung, es ist schwer zu verstehen, was ist der Typ Sucher in Ihrem Schnipsel und wie es konstruiert wurde. Aber Sie sollten nicht schließen Sie den Index-Leser mit searcher.GetIndexReader(). Schließen(). Die searcher.Close() schließt alle damit verbundenen Ressourcen und Index-Leser sowie IF Sucher ist nicht IndexSearcher Instanz mit IndexSearcher (IndexReader r). In diesem Fall müssen Sie den Index-Reader manuell schließen.

+0

Dank für ur Kommentare ... bin die Schaffung Sucher wie folgt aus: Sucher = new IndexSearcher (myIndexDir), so dass in diesem Fall, wie soll ich den index reader schließen? –

+0

Wenn Sie einen Sucher aus einem Verzeichnis erstellen, ist der schließende Sucher ausreichend. Es schließt den Leser intern. –

+0

danke shashikant für deine Antwort! –

1

Zu allererst Code wie diesen ist immer eine schlechte Idee:

try { 
    // Do something 
} catch(Exception ex) { 
    throw ex; // WRONG 
} 

Sie sind nur die Quelle der Ausnahme Maskierung und wirft noch. Besser nur diese Zeilen zu löschen.

Wenn Sie die IndexReader nicht selbst erstellt haben, müssen Sie sie nicht selbst schließen. Die Wahrscheinlichkeit ist hoch, dass Sie die Methode getIndexReader überhaupt nicht verwenden müssen.

Auch wenn Sie searcher innerhalb des Blocks try zuweisen, müssen Sie nicht überprüfen, ob es null ist, da es keinen Weg gibt, einen Nullwert zu erhalten.

Hier ist ein Beispiel dafür, was Ihr Code sollte wie folgt aussehen:

String myIndexDir = "/my/index/dir"; 

IndexSearcher searcher = new IndexSearcher(myIndexDir); 
try { 
    // Do something with the searcher 
} finally { 
    searcher.close(); 
}