2010-09-07 71 views
0

有時需要重新生成lucene索引,例如,當Compass映射中的某些內容發生變化或應用提升方式時,或者出於某種原因而發生了某些內容損壞時。是否有可能在後臺重新生成Lucene索引?

在我的情況下,索引的生成需要大約5到6個小時,清除索引之前導致數據不完整的時間間隔。 I. e。在這段時間內進行搜索會返回不完整的結果。

有沒有什麼標準的方法讓lucene在後臺生成索引?例如。寫索引到一個臨時目錄和(當索引完成時沒有異常等)用新的索引替換現有的索引?

當然,人們可以實現這個「手動」,但人們必須?聽起來像是我常見的用例。

問候+感謝您的意見,

彼得:)

回答

0

我有過類似的經歷;分析儀的某些參數會隨時發生變化;顯然如果是這樣的話,整個索引需要重建。 (我不會詳述,只要說我有同樣的要求!)

我做了你在你的問題中提出的建議。有三個目錄,「舊」,「當前」和「新」。來自現場的查詢總是與「當前」相反。該指數再創造的過程是:

  1. 遞歸刪除「舊」與「新」目錄
  2. 創建新的索引,「新」目錄(在我的情況下,大約需要6小時)
  3. 重命名「當前」到「老」;和「新」到「當前」
  4. 遞歸刪除「舊」目錄

的內容時會發生進程崩潰的分析 - 如果第1步驟崩潰,下一次會而已矣。如果它在第二步崩潰,那麼「新」目錄將在下次運行時被刪除。第三步非常快 - 重命名一個目錄是快速和原子的。在第四步中失敗並不重要,它只會在下一次運行時被清理乾淨。

仔細觀察者會注意到,在步驟3中,系統可能會在重命名當前目錄和移動新目錄之間崩潰。這種情況不太可能發生,因爲目錄重命名如此之快。該系統已投入生產幾年,這從未發生過(但?)。

0

我認爲通常的方式做到這一點是使用Solr的複製功能。在你的情況下,主從機將在同一臺機器上,但只是指向不同的目錄。

0

我們有類似的問題。我們的數據在Lucene中編入索引,但最初的數據源是數據庫和內容回購。

因此,如果索引不同步(或數據類型更改等),我們只需遍歷索引中的所有現有條目並重新生成數據,以便更新每個文檔。這並不是一件複雜的事情。

相關問題