2016-09-01 23 views
0

我正在使用Elasticsearch 2.3.3并尝试制作现有索引的精确副本。 (使用捆绑Elasticsearch安装的reindex插件)ElasticSearch - 如何制作现有索引的1对1副本

问题是数据被复制,但映射和分析器等设置被忽略。

制作现有索引的精确副本(包括其所有设置)的最佳方法是什么?

我的主要目标是创建一个副本,更改副本,并且只有一切顺利,才能将副本切换到副本。 (零宕机时间备份和恢复)

+1

实现此目的的最好方法是利用[index templates](https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-templates.html)。你试过了吗? – Val

+0

我会试一试 - 谢谢。 –

回答

0

下似乎实现正是我想要的:

使用Snapshot And Restore我能够恢复到一个不同的索引:

POST /_snapshot/index_backup/snapshot_1/_restore { "indices": "original_index", "ignore_unavailable": true, "include_global_state": false, "rename_pattern": "original_index", "rename_replacement": "replica_index" }

据我目前所知道的,它已经完成了我所需要的。 我的原始索引的一对一副本。

我也怀疑这个操作比我的目的重新索引有更好的性能。

2

在我看来,实现这一目标的最佳方法是利用index templates。索引模板允许您存储索引的规范,包括设置(因此分析器)和映射。然后,无论何时创建与您的模板匹配的新索引,ES都将使用模板中的设置和映射为您创建索引。

所以,首先要创建与模板图案myindex-*称为index_template索引模板:

PUT /_template/index_template 
{ 
    "template": "myindex-*", 
    "settings": { 
    ... your settings ... 
    }, 
    "mappings": { 
    "type1": { 
     "properties": { 
     ... your mapping ... 
     } 
    } 
    } 
} 

什么接下来会发生的是,每当你想索引的任何索引其名称匹配myindex-*一个新的文档,ES会使用这个模板(+设置和映射)来创建新的索引。

所以说你当前的索引被称为myindex-1,你想重新索引到一个新的索引myindex-2。你会送一个重新索引的查询像这样的

POST /_reindex 
{ 
    "source": { 
    "index": "myindex-1" 
    }, 
    "dest": { 
    "index": "myindex-2" 
    } 
} 

myindex-2还不存在,但它会在这个过程中使用的设置和index_template映射因为名称myindex-2myindex-*模式匹配来创建。

那样简单。

+0

谢谢,我接受了你的答案。 我想,但是我发现通过使用快照和恢复实现我的主要备份索引的更好方法。 看起来,在恢复时,我可以提供一个'rename_replacement',如果我理解正确的话就会制作索引的精确副本。 我还没有尝试过,但对我来说这似乎是个好主意。 –

+0

好吧,也许你应该描述你的解决方案,以便其他有类似需求的人也能找到自己的方式。感谢他们! – Val

+0

是的 - 我会试试以确保它确实做到了我认为它所做的事情,如果是这样,将会在此处发布它作为附加答案。 –

相关问题