是否可以使用以下代码行来获取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();
即使在锁定的索引上,您也可以在提交点上打开阅读器,而作者可能仍然会更改索引。
答案 0 :(得分:2)
如果没有IndexWriter写入索引,那么上面的代码就可以了。
但是针对索引打开的IndexWriter可以轻松删除此IndexReader引用/仍在使用的文件(例如,当合并完成时),然后您的备份将失败。
答案 1 :(得分:1)
您需要使用SnapshotDeletionPolicy。
除非您有未发布的快照,否则编写者可以随意删除文件。这只会在冲洗/关闭时发生,所以你可以在大部分时间内完成它,但它并不总是有效。
请注意,该策略由编写者拥有,因此如果您尝试以某种方式使用一个进程备份它而另一个进程写入,则这将无效。