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

时间:2011-06-03 07:00:29

标签: java lucene

是否可以使用以下代码行来获取lucene索引或IndexWriter / SnapshotDeletionPolicy的热备份,如Lucene index backup中所述?

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

即使在锁定的索引上,您也可以在提交点上打开阅读器,而作者可能仍然会更改索引。

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

您需要使用SnapshotDeletionPolicy。

除非您有未发布的快照,否则编写者可以随意删除文件。这只会在冲洗/关闭时发生,所以你可以在大部分时间内完成它,但它并不总是有效。

请注意,该策略由编写者拥有,因此如果您尝试以某种方式使用一个进程备份它而另一个进程写入,则这将无效。