2016-09-01 1 views
0

Я использую Elasticsearch 2.3.3 и пытаюсь сделать точную копию существующего индекса. (с использованием плагина reindex в комплекте с установкой Elasticsearch)ElasticSearch - Как сделать копию 1-к-1 существующего индекса

Проблема в том, что данные копируются, но параметры, такие как отображение и анализатор, не учитываются.

Каков наилучший способ создания точной копии существующего индекса, включая все его настройки?

Моя основная цель - создать копию, сменить копию, и только если все пошло хорошо, переключите псевдоним на копию. (Резервное копирование и восстановление нулевого простоя)

+1

Лучший способ достичь этого - использовать [шаблоны индексов] (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" }

Насколько я могу в настоящее время сказать, это выполнил именно то, что мне было нужно. 1-к-1 копия моего первоначального индекса.

Я также подозреваю, что эта операция имеет лучшую производительность, чем повторная индексация для моих целей.

2

На мой взгляд, лучший способ достичь этого - использовать index templates. Шаблоны индексов позволяют хранить спецификацию вашего индекса, включая настройки (следовательно, анализаторы) и сопоставления. Затем всякий раз, когда вы создаете новый индекс, соответствующий вашему шаблону, ES создаст индекс для вас, используя настройки и сопоставления, присутствующие в шаблоне.

Итак, сначала создайте шаблон индекса с именем index_template с шаблоном шаблона myindex-*:

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-2 соответствует myindex-* шаблону.

Простой как это.

+0

Спасибо, я принял ваш ответ. Я думаю, однако, я нашел лучший способ достичь своей основной цели резервного копирования индекса с помощью моментального снимка и восстановления. Похоже, при восстановлении я могу предоставить 'rename_replacement', который, если я правильно понимаю, сделает точную копию индекса. Я еще не пробовал, но мне кажется, что это хорошая идея. –

+0

Хорошо, может быть, вам следует описать ваше решение, чтобы другие люди с подобной потребностью тоже нашли свой путь. Спасибо за них! – Val

+0

Да - я попробую, чтобы убедиться, что он действительно делает то, что я думаю, и если да, опубликует его здесь как дополнительный ответ. –

Смежные вопросы