Закрытие indexreader - PullRequest
0 голосов
/ 11 мая 2009

У меня есть строка в моем коде Lucene:

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

В моем предложении finally, когда я выполняю Searcher.Close (), он также выполнит Searcher.GetIndexReader (). Закрыть за кулисами?

Или мне нужно явно вызывать searcher.GetIndexReader (). Close (), чтобы закрыть IndexReader ??

Спасибо за чтение.

Ответы [ 2 ]

2 голосов
/ 11 мая 2009

Извините, сложно понять, какой тип искатель в вашем фрагменте и как он был построен. Но вы не должны закрывать читатель индекса с помощью searcher.GetIndexReader (). Close () . searcher.Close () закроет все связанные с ним ресурсы, а также считыватель индекса ЕСЛИ искатель НЕ Экземпляр IndexSearcher, созданный из IndexSearcher (IndexReader r) . В этом случае вы должны закрыть программу чтения индекса вручную.

1 голос
/ 11 мая 2009

Прежде всего, такой код всегда плохая идея:

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

Вы просто маскируете источник исключения и продолжаете бросать. Лучше просто удалить эти строки.

Если вы не создали IndexReader самостоятельно, вам не нужно закрывать его самостоятельно. Высоки шансы, что вам вообще не нужно использовать метод getIndexReader.

Кроме того, если вы не присваиваете searcher в блоке try, нет необходимости проверять, является ли оно нулевым, поскольку нет способа получить нулевое значение.

Вот пример того, как должен выглядеть ваш код:

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

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