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吗 还是需

我的Lucene代码中有一行:

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);所以在这种情况下,我应该如何关闭索引阅读器?如果您是从目录创建搜索器,关闭搜索器就足够了。它将在内部关闭读卡器。