2015-04-08 40 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