2015-04-08 70 views
1

https://www.elastic.co/blog/changing-mapping-with-zero-downtime/ElasticSearch - 零停機

重建索引數據我嘗試創建一個新的指標,零停機本指南重新索引我的數據。

現在我已經稱爲索引「photoshooter」我按照步驟

1)用新的映射創建新的索引「photoshooter_v1」 ......(完成)

2)創建別名...

捲曲-XPOST本地主機:9200/_aliases -d「

{ 
    "actions": [ 
     { "add": { 
      "alias": "photoshooter", 
      "index": "photoshooter_v1" 
     }} 
    ] 
} 

,我得到這個錯誤...

{ 
    "error": "InvalidAliasNameException[[photoshooter_v1] Invalid alias name [photoshooter], an index exists with the same name as the alias]", 
    "status": 400 
} 

我覺得我失去的東西與邏輯..

+0

你有沒有做到這一點? ES文檔從來沒有提到你正在嘗試做什麼是不可能的,但是他們的例子明確地將別名添加到多個索引中作爲單個操作的一部分。 – tishma

+0

嘿,我沒有正確閱讀錯誤信息:)我明白,它不會讓你應用相同的別名超過1索引。 – tishma

回答

4

比方說你目前的指數命名爲「photoshooter」如果我的猜測是正確的確定。

現在爲該指數第一個別名 - OK

 { 
      "actions": [ 
       { "add": { 
        "alias": "photoshooter_docs", 
        "index": "photoshooter" 
       }} 
      ] 
     } 

測試 - curl -XGET 'localhost:9200/photoshooter_docs/_search'

注意 - 現在,您將使用「photoshooter_docs」作爲索引名與索引互動這實際上是' photoshooter'好的。

現在,我們創建一個新的地圖新的索引,讓我們說,我們將其命名爲「photoshooter_v2」現在你的'photoshooter人指數數據複製到新的索引(photoshooter_v2)

複製完所有現在的數據只是 取下前面的指數別名新指數 - 再次

 curl -XPOST localhost:9200/_aliases -d ' 
     { 
      "actions": [ 
       { "remove": { 
        "alias": "photoshooter_docs", 
        "index": "photoshooter" 
       }}, 
       { "add": { 
        "alias": "photoshooter_docs", 
        "index": "photoshooter_v2" 
       }} 
      ] 
     } 

測試 - >curl -XGET 'localhost:9200/photoshooter_docs/_search'

恭喜您已經改變了測繪無零停機時間。

並複製數據,您可以使用工具這樣

https://github.com/mallocator/Elasticsearch-Exporter 

注意 - 此工具也將複製舊索引到,你可能不想做新的索引的映射。所以,你可以根據自己的使用讀它文件或編輯。

感謝

希望這有助於

+0

如何將舊數據複製到新索引。我應該從我的應用更改索引名稱嗎? – Michalis

+0

要將數據從一個索引複製到另一個索引,您可以使用類似這樣的工具。 https://github.com/mallocator/Elasticsearch-Exporter 還有許多其他可用的耳託,您可以使用任何一種。 只需閱讀該工具的文檔並根據您的項目需要運行它。 –

+0

請參閱編輯在我的答案希望幫助:) –

0

這是很簡單的,你不能與已經存在的索引,名稱創建一個別名。

你需要在新的一個新指標,再考慮指數的新名稱的數據,然後刪除舊的,能夠給它相同的名稱。

如果你想每天都這樣做,你可以考慮每日將日期加入你的索引名稱並每天切換。

+0

如果我刪除舊的,我將失去所有的數據! 我想零宕機...如果新數據追加或更改爲我的索引,同時將我的數據複製到新索引..這將是問題 – Michalis

+0

您必須重新索引新數據中的數據,然後刪除舊指數。沒有其他辦法。 – eliasah

+0

這是... http://www.elastic.co/guide/en/elasticsearch/guide/master/index-aliases.html 但我失去了一些東西...... 「要開始,創建索引my_index_v1,並設置別名my_index指向它:「 但當我嘗試此...我得到此錯誤... { 」error「:」InvalidAliasNameException [[photoshooter_v1]無效的別名[索引存在與別名同名]「, 」status「:400 } – Michalis