Если вы когда -либо работали с Elasticsearch, вам, вероятно, пришлось изменить ваше оригинальное отображение и повторно рассказать данные о своем кластере. Если вы не очень удивительны в прогнозировании функциональности поиска, которые вам нужны от Elasticsearch, и с первого раза не получите своего картирования. Если это вы, не нужно закончить чтение этого поста.
Возиться с данными в производстве-не самая забавная работа в мире, и я никогда не нашел пошаговые инструкции о том, как правильно/безопасно выполнять реиндекс. Так вот в чем этот пост. Надеюсь, это кому -то поможет!
Как всегда, проверьте это на вашем локальном, постановком или любом непроизводном кластере Elasticsearch, прежде чем предположить, что он работает. Сколько записей вы реиндексинг станут одним из определяющих факторов в том, сколько времени требуется для обработки.
Создайте свой новый индекс + картирование
Первый шаг — создать совершенно новый индекс с вашим новым картированием.
Допустим, наша Elasticsearch работает на http://127.0.0.1:9201 , наш старый индекс называется testV1
и наш новый индекс testV2
Анкет
Для краткости отображение пустое.
curl -XPUT --header 'Content-Type: application/json' http://127.0.0.1:9201/testv2 -d ' { "settings": {}, "mappings": { "_doc": { "properties": {} } } } '
Повторите ваши данные
Вот где мы на самом деле начинаем запускать данные из вашего старого индекса в ваш новый. Одна вещь, которую нужно отметить, это wait_for_completion
флаг. Когда это будет установлено на FALSE, задача будет создана и позволяет вам выпустить последующие запросы, чтобы получить обновления прогресса. Без этого команда будет просто повесить, и вы, вероятно, получите скручивание
Тайм -аут и не имею возможности узнать, когда это сделано, переосмысление.
curl -XPOST --header 'Content-Type: application/json' http://127.0.0.1:9201/_reindex?wait_for_completion=false -d ' { "source" : { "index" : "testv1" }, "dest" : { "index" : "testv2", "version_type" : "external" } } '
Этот вызов вернет идентификатор задачи, который можно использовать, чтобы получить обновления статуса, например, это:
curl -XGET --header 'Content-Type: application/json' http://127.0.0.1:9201/_tasks/?pretty=true
После завершения задачи по переоборудованию вы можете проверить количество документов в вашем старом индексе, соответствующее новой.
curl -XGET http://127.0.0.1:9201/testv1/_count curl -XGET http://127.0.0.1:9201/testv2/_count
Когда вы удовлетворены тем, что все выглядит хорошо, перейдите на последний шаг … создавая псевдоним и рассказываете людям, насколько вы удивительны в Elasticsearch.
Создайте псевдоним, указывающий на ваш новый индекс и удалите старый
Вы, вероятно, не хотите изменять все ваши запросы, чтобы использовать новое имя индекса. К счастью, Elasticsearch позволяет вам создавать псевдонимы. Идея состоит в том, что мы создаем псевдоним с тем же именем, что и исходный индекс, но указываем его на новый. Таким образом, в наших запросах нет изменений.
curl -XPOST --header 'Content-Type: application/json' http://127.0.0.1:9201/_aliases -d ' { "actions" : [ { "add" : { "index" : "testv2", "alias" : "testv1" } }, { "remove_index" : { "index": "testv1" } } ] } '
Вуаля! Ты закончил.
Кроме того, есть вещи, которые вы можете сделать, чтобы улучшить производительность переодевания. Как изменение refresh_interval
и уменьшение количества копий. Независимо от того, является ли это то, что вам нужно, будет в значительной степени зависеть от размера кластера и базового оборудования.
Вот образец того, как это сделать, если вам нужно. Убедитесь, что вы запустили это до начала команды Reindex.
curl -XPUT --header 'Content-Type: application/json' http://127.0.0.1:9201/testv2/_settings -d ' { "index" : { "refresh_interval" : "-1", "number_of_replicas": "0" } } '
Обязательно установите эти значения на все, что, по вашему мнению, лучше всего, когда новый индекс полностью заполнен.
Спасибо!
Оригинал: «https://dev.to/danstanhope/update-your-mapping-reindex-elasticsearch-easily-well-pretty-easily-29ih»