关闭索引读取器

时间:2009-05-11 01:41:53

标签: lucene lucene.net

我的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 个答案:

答案 0 :(得分:2)

很抱歉,您很难理解代码段中搜索者的类型以及构建方式。但是你不应该 searcher.GetIndexReader()关闭索引阅读器。关闭() searcher.Close()将关闭与其关联的所有资源和索引阅读器 IF搜索器不是使用 IndexSearcher(IndexReader r)构建的IndexSearcher实例。在这种情况下,您必须手动关闭索引阅读器。

答案 1 :(得分:1)

首先,像这样的代码总是一个坏主意:

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(); 
}