2

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

注意:我要制作索引的数据非常大,所以我无法关闭 IndexWriter 运行时。

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

4

1 回答 1

4

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

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

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

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

于 2016-02-22T14:50:19.050 回答