Lucene IndexWriter.Close() 与 indexWriter.Commit()

Lucene IndexWriter.Close() vs indexWriter.Commit()

当我只有一个 indexWriter 实例时,IndexWriter.Close()IndexWriter.Commit() 有什么不同?

注意:我要做索引的数据很大,无法关闭IndexWriter runtime

注意:我想在数据索引的同时在文档中搜索

Commit() 提交未决的、缓冲的索引更改(然后可以使用 IndexReader() 找到)。然后可以继续使用 IndexWriter 进行更多更改。 Close() 也执行 Commit(),但另外关闭 IndexWriter。请注意,IndexWriter 实现了 IDisposable(),我建议使用它。

根据你的第一个注释,如果你的意思是有很多文档需要索引,那很好。您可以对多个文档使用相同的 IndexWriter 而无需关闭它。只需在同一个 IndexWriter using() 语句中遍历要索引的许多文档。

关于您的第二个注释,您必须在 IndexReader() 看到您的 IndexWriter() 更改之前执行 commit()(或 close())。您始终可以使用 IndexReader() 进行搜索,但它只会看到自上次 IndexWriter.Commit().

以来的索引

对于这些重要的细节,我推荐 Lucene In Action。对我帮助很大。