繁体   English   中英

Apache Lucene的实现

[英]Implementation of Apache Lucene

我正在阅读过去几周的Apache Lucene的源代码,并试图找出主要负责在磁盘上编写发布列表/索引的方法或类。 我已经阅读了很多有关索引的文章,并试图找到在将索引写到磁盘上的过程中正在调用某种方法的地方,但是失败了。 我知道某些内部缓冲区已满时会定期写入索引或发布列表。 如果有人已经阅读了该代码或知道该怎么做,请告诉。 谢谢

我不知道答案,但是我对此也很好奇。 搜索时间过长之后,我在indexWriter页面上发现了这一点。

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

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

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

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

IndexWriter

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM