https://www.elastic.co/blog/changing-mapping-with-zero-downtime/
我尝试使用本指南创建一个新索引并使用零停机时间重新索引数据。
现在我有一个名为“photoshooter”的索引,我按照步骤
1)使用新映射创建新索引“photoshooter_v1”...(完成)
2)创建别名......
curl -XPOST localhost: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 :(得分:4)
让我们说你的当前索引被命名为“photoshooter”,如果我猜对了。
现在首先为此索引创建别名 - 确定
{
"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
注意 - 此工具还会复制从旧索引到新索引的映射,您可能不希望这样做。因此,您已阅读其文档或根据您的用途进行编辑。
由于
希望这有帮助
答案 1 :(得分:0)
这很简单,您无法使用已存在的索引名称创建别名。
您需要考虑新索引的新名称,重新索引新索引中的数据,然后删除旧名称,以便为其提供相同的名称。
如果您希望每天都这样做,您可以考虑将每个日期添加到索引的名称并每天切换它。