Lucene热索引备份使用IndexReader而不是IndexWriter/SnapshotDelationPolic



是否应遵循lucene索引备份中所述的以下代码行以获得lucene索引的热备份或IndexWriter/SnapshotDeletitionPolicy?

Directory dir = ...;
IndexReader reader = IndexReader.open(dir);
IndexCommit commit = reader.getIndexCommit();
Collection<String> fileNames = commit.getFileNames();
//copy the files
reader.close();

即使在锁定的索引上,您也可以在提交点打开读取器,而编写器仍然可以更改索引。

如果没有IndexWriter写入索引,那么上面的代码就可以了。

但是,针对索引打开的IndexWriter可以很容易地删除此IndexReader引用/仍在使用的文件(例如,当合并完成时),然后备份将失败。

您需要使用SnapshotDelationPolicy。

除非你有一个未发布的快照,否则作者可以随意删除文件。这只会发生在齐平/闭合时,所以你可能在大多数时候都能逃脱惩罚,但它并不总是有效的。

请注意,该策略由编写者所有,因此,如果您试图在另一个进程写入时以某种方式使用一个进程来备份它,这将不起作用。

最新更新