2010-10-05 53 views
3

繼承人我的問題,我執行add()將文檔添加到我的索引,然後關閉()它。這很好!Lucene - 打開一個封閉的IndexWriter

現在我有一個新的要求,每次我在我的數據庫中保存一些東西,我需要更新我的索引。我無法再創建indexWriter,因爲它需要4分鐘以上的時間,所以我只需要將文檔更新()或添加()到索引。爲了實現它,我沒有做index.close(),我在填充我的索引後做了index.commit()...但我認爲它應該是close,然後打開update() 。

有什麼建議嗎?謝謝!

回答

11

close是一個代價高昂的操作,如果您經常更新,javadocs建議使用commit。的Javadoc指出close

提交所有更改索引和 關閉所有相關文件。請注意, 這可能是一個昂貴的操作,所以, 試圖重新使用一個單一的作家,而不是 關閉和打開一個新的。

我相信closecommit之間的不同之處在於僅commit刷新數據,使其對讀者可見,而close過優化指數。這使得commit5 times fasterclose

如果您要連續添加數據,那麼最好在commit之後,最後再完成close

+0

非常感謝,我在想同樣的事情,但我開放了第二個意見! – orlandoMG 2010-10-20 16:44:24

+0

如果你只是執行'commit()'而不是'close()',那麼你的索引就不會被鎖定,這會阻止子索引寫入索引? – stack247 2015-08-20 15:53:09