Коли ви змінюєте дані в індексі Elasticsearch, це може призвести до простою, оскільки функціонал завершується, а дані переіндексуються.
Цей посібник надасть вам набагато кращий спосіб оновлення індексів, не зазнаючи простою з існуючим джерелом даних. Використовуючи API переіндексації Elasticsearch, ми скопіюємо дані з певного джерела в інше.
Давайте почнемо.
ПРИМІТКА: Перш ніж ми почнемо, операції переіндексації вимагають великих ресурсів, особливо на великих індексах. Щоб мінімізувати час, необхідний для повторного індексування, відключіть number_of_replicas, встановивши значення 0 і ввімкніть їх після завершення процесу.
Увімкнути поле _Source
Операція повторного індексування вимагає ввімкнення поля джерела для всіх документів у вихідному індексі. Зверніть увагу, що поле джерела не індексується і не може бути здійснено пошук, але корисно для різних запитів.
Увімкніть поле _Source, додавши запис, як показано нижче:
ВСТАНОВИТИ індекс_1“Відображення”:
"_source":
"увімкнено": true
Переіндексувати всі документи
Щоб переіндексувати документи, нам потрібно вказати джерело та пункт призначення. Джерелом і призначенням можуть бути існуючі індекси, псевдоніми індексу та потоки даних. Ви можете використовувати індекси з локального або віддаленого кластера.
ПРИМІТКА: Щоб індексація відбулася успішно, джерело та адреса не можуть бути подібними. Ви також повинні налаштувати призначення, як потрібно, перед повторним індексуванням, оскільки воно не застосовує налаштування з джерела або будь-якого пов'язаного з ним шаблону.
Загальний синтаксис переіндексації такий:
POST / _reindexПочнемо із створення двох індексів. Перший буде джерелом, а другий - пунктом призначення.
PUT / index_index"settings": "number_of_replicas": 0, "number_of_shards": 1,
"mappings": "_source": "enabled": true, "псевдоніми":
"псевдонім_1": ,
"псевдонім_2":
"filter": "term":
"користувач.id ":" kibana "
, "routing": "1"
Команда cURL:
curl -XPUT "http: // localhost: 9200 / source_index" -H 'Content-Type: application / json' -d '"settings": "number_of_replicas": 0, "number_of_shards": 1, "mappings" : "_source": "enabled": true, "aliases": "alias_1": , "alias_2": "filter": "term": "користувач.id ":" kibana "," маршрутизація ":" 1 " 'Тепер щодо індексу призначення (ви можете скористатися наведеною вище командою і змінити кілька речей або скористатися наведеною нижче):
PUT / index_index"settings": "number_of_replicas": 0, "number_of_shards": 1,
"mappings": "_source": "enabled": true, "псевдоніми":
"псевдонім_3": ,
"псевдонім_4":
"filter": "term":
"користувач.id ":" kibana "
, "routing": "1"
Як завжди, користувачі cURL можуть використовувати команду:
curl -XPUT "http: // localhost: 9200 / destination_index" -H 'Content-Type: application / json' -d '"settings": "number_of_replicas": 0, "number_of_shards": 1, "mappings" : "_source": "enabled": true, "aliases": "alias_3": , "alias_4": "filter": "term": "користувач.id ":" kibana "," маршрутизація ":" 1 " 'Тепер у нас є індекси, які ми хочемо використовувати, і ми можемо перейти до переіндексації документів.
Розглянемо наведений нижче запит, який копіює дані з source_index у destination_index:
Опублікувати _reindex“Джерело”:
"index": "source_index"
,
"dest":
"index": "index_index"
Команда cURL для цього:
curl -XPOST "http: // localhost: 9200 / _reindex" -H 'Тип вмісту: application / json' -d '"джерело": "індекс": ".kibana "," dest ": " index ":" index_index " 'Виконання цієї команди має дати вам детальну інформацію про виконану операцію.
ПРИМІТКА: Index_index повинен мати дані.
"взяв": 2836,
"timed_out": хибне,
"всього": 13059,
"оновлено": 0,
"створено": 13059,
"видалено": 0,
"партії": 14,
"version_conflicts": 0,
"петлі": 0,
"повторні спроби":
"навалом": 0,
"пошук": 0
,
"throttled_millis": 0,
"request_per_second": -1.0,
"throttled_until_millis": 0,
"збої": []
Перевірка статусу переіндексації
Ви можете переглянути стан операцій переіндексації, просто використовуючи _tasks. Наприклад, розглянемо запит нижче:
ОТРИМАТИ / _задачі?детально = true & actions = * reindex & group_by = батькиКоманда cURL:
curl -XGET "http: // localhost: 9200 / _tasks?детально = true & actions = * reindex & group_by = батьки "Це має дати вам детальну інформацію про процес переіндексації, як показано нижче:
"завдання":
"FTd_2iXjSXudN_Ua4tZhHg: 51847":
"вузол": "FTd_2iXjSXudN_Ua4tZhHg",
"id": 51847,
"type": "транспорт",
"action": "індекси: data / write / reindex",
"статус":
"всього": 13059,
"оновлено": 9000,
"створено": 0,
"видалено": 0,
"партії": 10,
"version_conflicts": 0,
"петлі": 0,
"повторні спроби":
"навалом": 0,
"пошук": 0
,
"throttled_millis": 0,
"request_per_second": -1.0,
"throttled_until_millis": 0
,
"description": "переіндексувати з [source_index] в [destination_index] [_ doc]",
"start_time_in_millis": 1611247308063,
"run_time_in_nanos": 2094157836,
"скасовується": правда,
"заголовки":
Висновок
Ми розглянули все, що вам потрібно знати про використання API переіндексації Elasticsearch для копіювання документів з одного індексу (джерела) до іншого (місця призначення). Хоча API переіндексації містить більше, цей посібник повинен допомогти вам розпочати роботу.