2011-06-03 40 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。

除非您有未發佈的快照,否則作者可以隨意刪除文件。這隻會在清空/關閉時發生,所以大部分時間你都可以避開它,但它並不總是有效。

請注意,該策略由作者擁有,因此如果您嘗試以某種方式使用一個進程在另一個進程寫入時對其進行備份,則此操作無效。