Lucene 闭合索引读取器
我的Lucene代码中有一行:Lucene 闭合索引读取器,lucene,lucene.net,Lucene,Lucene.net,我的Lucene代码中有一行: try { searcher.GetIndexReader(); } catch(Exception ex) { throw ex; } finally { if (searcher != null) { searcher.Close(); } } 在我的finally子句中,当我执行searcher.Close()时,它还会在幕后执行searcher.GetIndexReader().Close吗 还是需
try
{
searcher.GetIndexReader();
}
catch(Exception ex)
{
throw ex;
}
finally
{
if (searcher != null)
{
searcher.Close();
}
}
在我的finally子句中,当我执行searcher.Close()时,它还会在幕后执行searcher.GetIndexReader().Close吗
还是需要显式调用searcher.GetIndexReader().Close()方法来关闭IndexReader
感谢阅读。抱歉,很难理解您的代码片段中的搜索者类型以及它是如何构造的。但是不应使用searcher.GetIndexReader().close()关闭索引读取器。searcher.Close()将关闭与之相关的所有资源,如果searcher不是用IndexSearcher(IndexReader r)构造的IndexSearcher实例,则也将关闭索引读取器。在这种情况下,您必须手动关闭索引阅读器。很抱歉,很难理解代码片段中的搜索者的类型以及它是如何构造的。但是不应使用searcher.GetIndexReader().close()关闭索引读取器。searcher.Close()将关闭与之相关的所有资源,如果searcher不是用IndexSearcher(IndexReader r)构造的IndexSearcher实例,则也将关闭索引读取器。在这种情况下,您必须手动关闭索引读取器。首先,这样的代码总是一个坏主意:
try {
// Do something
} catch(Exception ex) {
throw ex; // WRONG
}
您只是屏蔽了异常的来源,仍然抛出。最好删除那些行
如果不是您自己创建的索引阅读器
,您不需要自己关闭它。很有可能您根本不需要使用方法getIndexReader
另外,除非您在try
块中分配给searcher
,否则不需要检查它是否为null,因为它无法获得null值
下面是一个代码的示例:
String myIndexDir = "/my/index/dir";
IndexSearcher searcher = new IndexSearcher(myIndexDir);
try {
// Do something with the searcher
} finally {
searcher.close();
}
首先,这样的代码总是一个坏主意:
try {
// Do something
} catch(Exception ex) {
throw ex; // WRONG
}
您只是屏蔽了异常的来源,仍然抛出。最好删除那些行
如果不是您自己创建的索引阅读器
,您不需要自己关闭它。很有可能您根本不需要使用方法getIndexReader
另外,除非您在try
块中分配给searcher
,否则不需要检查它是否为null,因为它无法获得null值
下面是一个代码的示例:
String myIndexDir = "/my/index/dir";
IndexSearcher searcher = new IndexSearcher(myIndexDir);
try {
// Do something with the searcher
} finally {
searcher.close();
}
感谢您的评论…我正在创建这样的搜索器:searcher=newindexsearcher(myIndexDir);所以在这种情况下,我应该如何关闭索引阅读器?如果您是从目录创建搜索器,关闭搜索器就足够了。它将在内部关闭阅读器。感谢您的评论…我正在创建这样的搜索器:searcher=newindexsearcher(myIndexDir);所以在这种情况下,我应该如何关闭索引阅读器?如果您是从目录创建搜索器,关闭搜索器就足够了。它将在内部关闭读卡器。