2011-06-03 63 views
7

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

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

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

回答

2

如果你没有IndexWriter写入索引,那么上面的代码很好。

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

1

您需要使用SnapshotDeletionPolicy。

除非您有未发布的快照,否则作者可以随意删除文件。这只会在清空/关闭时发生,所以大部分时间你都可以避开它,但它并不总是有效。

请注意,该策略由作者拥有,因此如果您尝试以某种方式使用一个进程在另一个进程写入时对其进行备份,则此操作无效。