2014-03-12 63 views
0

我遇到了一種情況,我們有時必須完全擦除索引,然後重新索引集合。這個過程當然需要很長的時間。我不想在Prod中允許任何或至少延長停機時間。因此,我正在研究Solr中的一種方法,即創建一個新集合,該集合是舊集合的副本,但沒有數據。我可以在很少或任何服務降級的情況下重新索引這個新集合。然後,我想使用別名將新集合指向客戶正在使用的別名,以便他們即使不知道它也會開始使用新集合。Solr集合創建和自定義集合庫

我目前正在運行4.2,但想知道如果我不應該升級到4.7以便更好地支持這一點。看起來像4.2擁有大部分相同的Collection API支持。

我碰到的第一個難題是我正在複製的集合在客戶庫中有一個lib文件夾。如果可能的話,我想把它們推送到solrhome/lib文件夾,以便它們只加載一次。我的問題是,如果我有不同版本的自定義數據導入器,那麼我將遇到類加載器問題。

是否有人成功實施了這種場景,並且可以提供一些洞察力,幫助您瞭解您的缺陷和成功經驗以及對您有用的方面?

更多詳細信息... 我有許多不同的集合是本Solr的雲的一部分。如果可能的話,我不想影響任何其他集合,同時對新複製的集合進行更改。

+0

只是好奇,爲什麼你需要首先消滅你的索引?您的架構中有獨特的密鑰嗎? – arun

+0

你可以隨時寫一個腳本。 – MYK

+0

當我們改變模式並且索引保留舊格式的信息時,很少有這種情況。例如,如果刪除字段或重命名模式中的字段,可能會導致索引處於不一致狀態。這在使用原子更新時尤其如此。這意味着您在更新期間並不總是清除不良數據。否則,我們只需要在Prod中完全導入數據並在運行中替換索引。 – gaoagong

回答

1

我也有類似的情況,我可能會修改solr模式,並需要重新索引整個數據。但是我的生產停機時間並不多。所以,我們想出了一個解決方案如..

比方說,我有一個SolrCloud1(現有的),用collection1(它有它自己的結構)。我有我的應用程序在不同的機器上運行。我的SolrCloud1和應用程序之間有一個負載均衡器。

現在,用collection1創建一個單獨的SolrCloud(比如說SolrCloud2)。保持與之前相同的結構。現在,在這個SolrCloud2中重新編制索引部分。完成後,在負載平衡器下提供新的SolrCloud。當新的SolrCLoud2啓動時,關閉SolrCloud1。

因此,如果沒有任何生產停機時間,您將重新索引數據。用戶無法知道任何關於此的信息。希望這會有所幫助。

+0

這是一個可行的解決方案,但可能不是針對我們情況的最佳解決方案。在我們的例子中,我們有許多不同的集合,保留整個雲的副本意味着我們也必須爲每個其他集合以及所討論的集合保留一份副本或重新索引數據。讓我在主要問題中增加更多這些細節,以幫助澄清我們的情況。 – gaoagong