我是否需要在 StandardAnalyzer 上调用 .Dispose(),或者 IndexWriter 上的 .Dispose() 是否处置其后代?
Do I need to call .Dispose() on the StandardAnalyzer, or does .Dispose() on the IndexWriter dispose its descendants?
在 Lucene.Net 中初始化 IndexWriter 如下所示:
var analyzer = new Lucene.Net.Analysis.Standard.StandardAnalyzer(version);
var indexWriterConfig = new Lucene.Net.Index.IndexWriterConfig(version, analyzer);
Index = new Lucene.Net.Index.IndexWriter(luceneDir, indexWriterConfig);
也就是说,您不能在没有分析器的情况下实例化 IndexWriter。所以,我希望在 IndexWriter 上调用 .Dispose()
会处理它的子项,包括 Analyzer。但是浏览代码我没有看到这种情况发生 - 到目前为止。我错过了吗?
那么:在 IndexWriter 上调用 .Dispose()
是否会处理 Analyzer,如果没有,为什么不呢?
IndexWriter 不处理分析器。
它不会处理分析仪,因为它不能确定您不会在其他地方使用分析仪。它是通过构造函数获得的引用,它可以在不知情的情况下被其他 IndexWriter 实例使用。
这是关于所有权;您创建了分析器并让作者使用它。因此,您有责任处置分析仪。
在 Lucene.Net 中初始化 IndexWriter 如下所示:
var analyzer = new Lucene.Net.Analysis.Standard.StandardAnalyzer(version);
var indexWriterConfig = new Lucene.Net.Index.IndexWriterConfig(version, analyzer);
Index = new Lucene.Net.Index.IndexWriter(luceneDir, indexWriterConfig);
也就是说,您不能在没有分析器的情况下实例化 IndexWriter。所以,我希望在 IndexWriter 上调用 .Dispose()
会处理它的子项,包括 Analyzer。但是浏览代码我没有看到这种情况发生 - 到目前为止。我错过了吗?
那么:在 IndexWriter 上调用 .Dispose()
是否会处理 Analyzer,如果没有,为什么不呢?
IndexWriter 不处理分析器。
它不会处理分析仪,因为它不能确定您不会在其他地方使用分析仪。它是通过构造函数获得的引用,它可以在不知情的情况下被其他 IndexWriter 实例使用。
这是关于所有权;您创建了分析器并让作者使用它。因此,您有责任处置分析仪。