2009-05-11 8 views
0

J'ai une ligne dans mon code Lucene:clôture IndexReader

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

Dans mon finally, quand j'exécute searcher.Close(), il sera également exécuter searcher.GetIndexReader() Fermer les coulisses. ?

Ou dois-je appeler explicitement searcher.GetIndexReader(). Méthode Close() pour fermer IndexReader ??

Merci d'avoir lu.

Répondre

2

Désolé, il est difficile de comprendre quel est le type de chercheur dans votre extrait et comment il a été construit. Mais vous ne doit pas fermer le lecteur d'index avec searcher.GetIndexReader(). Close(). Le searcher.Close() fermera toutes les ressources qui lui sont associées ainsi que le lecteur d'index IF searcher N'EST PAS Instance IndexSearcher construite avec IndexSearcher (IndexReader r). Dans ce cas, vous devez fermer le lecteur d'index manuellement.

+0

merci pour commentaires ur ... je crée ce chercheur comme: = new IndexSearcher chercheur (myIndexDir), dans ce cas, comment dois-je fermer le lecteur d'index? –

+0

Si vous créez un chercheur à partir du répertoire, la recherche de fermeture est suffisante. Il fermera le lecteur en interne. –

+0

merci shashikant pour votre réponse! –

1

Tout d'abord, le code comme celui-ci est toujours une mauvaise idée:

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

Vous juste masquer la source de l'exception, et encore jeter. Mieux vaut juste supprimer ces lignes.

Si vous n'avez pas créé le IndexReader vous-même, vous n'avez pas besoin de le fermer vous-même. Les chances sont élevées que vous n'avez pas besoin d'utiliser la méthode getIndexReader du tout. En outre, sauf si vous affectez à searcher dans le bloc try, il n'est pas nécessaire de vérifier si elle est nulle, car il n'y a aucun moyen d'obtenir une valeur nulle.

Voici un exemple de ce que votre code devrait ressembler à:

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

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