2012-08-13 36 views
0

我正在使用ASP.net MVC3電子商務項目開發Solr 3.6。Solr部署策略在創建整個索引時的100%運行時間

我有一個appx的索引。 Solr的1個lac產品。需求有一些變化,我們需要重建整個索引。整個索引需要花費大約1個小時,而在這個小時內,網站需要關閉。

我該如何重建索引並使網站保持原有的服務內容來自舊索引。在重建整個指數時減少停機時間的最佳做法是什麼?我希望我能100%正常運行。

編輯 我將幾個URL作爲存儲字段存儲到Solr數據中,因此在將數據添加到Solr時將其動態生成。如果我在像test.example.com這樣的不同子域上部署應用程序,那麼它將採用錯誤的URL,其中它只能與example.com一起使用。因此託管另一個應用程序對我來說不是一種選擇。

回答

6

您可以利用的Solr中multiple cores的概念,從而有用戶正在搜索依靠現場的核心和備用核心,然後可在使用你的命令進行架構更改,重新索引,等等。可以在沒有任何用戶停機的情況下切換活動和備用核心。交換將由Solr內部處理,您的用戶永遠不會注意到差異。

+0

謝謝你,現在正在努力實現這一點。這很棒。謝謝。 – Krunal 2012-08-16 14:27:11

+0

數據目錄怎麼樣?所有的核心應該有不同的數據目錄... ?? – 2012-08-17 06:23:25

+0

是的,你應該爲每個核心有一個不同的數據目錄。檢查Solr下載中的/ example/multicore文件夾,瞭解他們如何推薦應該設置的結構。 (在每個coreX文件夾中都有一個conf,並且還會有索引的數據文件夾)。請參閱solr.xml文件以瞭解如何爲每個核心設置的文件夾配置solr。 – 2012-08-17 11:30:40

1

依我之見,有幾種方法來正確地解決這個問題:

  1. 不要重建整個索引 - 只需更新必要的記錄上,即時他們改變時,Solr的可以做到這一點很簡單
  2. 在不同的端口上創建2個Solr實例,並一個接一個地使用它們。當第一次重建時,第二次可以使用舊索引。當第一次重建時,可以使用它,直到重建第二個實例的索引。
  3. 將boolean字段添加到名爲的索引,例如「old_index」。並且whem reindexing開始,更新所有當前記錄並設置old_index = 1,然後在配置中用old_index == 1查找記錄的某處寫入。比開始重新索引,比刪除舊記錄。可以使用Solr的deleteByQuery和Solr 4.x中的atomatic更新或手動更新來完成。