0

在过去的几周里,我正在阅读Apache Lucene的源代码,并试图找出主要负责在磁盘上写入帖子列表/索引的方法或类。我已经阅读了很多关于索引的内容,并试图找到在将索引写入磁盘的过程中调用某些方法但失败的点。我知道当某些内部缓冲区已满时,会定期写入索引或发布列表。如果有人已经阅读了代码或知道它在哪里完成,请告诉。谢谢

4

1 回答 1

0

我不知道答案,但我也很好奇这个问题。在没有搜索太久之后,我在 indexWriter 页面上遇到了这个。

public final void commit() throws IOException 将所有待处理的更改(添加和删除的文档、段合并、添加的索引等)提交到索引,并同步所有引用的索引文件,以便读者看到更改和索引更新将在操作系统或机器崩溃或断电后幸存下来。请注意,这不会等待任何正在运行的后台合并完成。这可能是一项代价高昂的操作,因此您应该在应用程序中测试成本并仅在真正需要时进行。

请注意,此操作会在索引文件上调用 Directory.sync。在文件内容和元数据处于稳定存储状态之前,该调用不应返回。对于 FSDirectory,这会调用操作系统的 fsync。但是,请注意:某些硬件设备实际上可能会在 fsync 期间缓存写入,并在这些位实际上在稳定存储上之前返回,以呈现更快的性能。如果您有这样的设备,并且它没有备用电池(例如),那么在断电时它可能仍然会丢失数据。Lucene 无法保证此类设备上的一致性。

注意:如果此方法遇到 OutOfMemoryError,您应该立即关闭编写器。有关详细信息,请参见上文。

指定者:接口 TwoPhaseCommit 中的 commit 抛出:IOException 另请参见:prepareCommit()、commit(Map)

索引编写器

于 2016-03-15T17:50:55.177 回答