КатегорииElasticsearchУроки

Elasticsearch — Урок 5.2 Reindex API

До Elasticsearch 5.0, чтобы изменить параметры индекса или изменить отображение индекса, приходилось создавать новый индекс и переиндексировать данные. Переиндексация большого индекса, как правило не простая задача, которая включает в себя чтение данных из источника, таких как база данных SQL, преобразование данных в документы и загрузка в Elasticsearch. При очень больших объемах данных используют процессоры пакетной обработки, такие как Hadoop. В зависимости от того, насколько большой индекс или насколько сложным является процесс ETL (Extract, Transform, Load), reindex может быть очень дорогостоящим. Чтобы решить эту проблему, был введен Reindex API. Оригинальный документ JSON, используемый для индексирования, хранится в поле _source, которое можно использовать в Reindex API для переиндексации документов. 

API Reindex можно использовать для следующего:

  • Чтобы изменить отображение / настройки существующего индекса
  • Объединение документов из нескольких индексов в один индекс
  • Копирование только отсутствующих документов
  • Чтобы скопировать подмножество документов из одного индекса в другой
  • Скопировать верхние N документов на основе значения сортировки
  • Скопировать только подмножество полей из индекса источника в целевой индекс

Точно так же, как _update_by_query и _delete_by_query, reindex работает, делая снимок существующего индекса. Вы можете указать wait_for_completion=false в URL-адресе, чтобы получить идентификатор задачи в ответ на запрос и отслеживать ход запроса с помощью API-интерфейса задач, как показано ниже:

GET /_tasks/xZjfyFsE1sBGdwxehcys6ydg:309742

Изменение сопоставлений / настроек

Reindex API можно использовать для изменения параметров индекса, например увеличения / уменьшения количества осколков, отключения поля _all и т. д. Его также можно использовать для изменения отображения существующего поля, например, вы хотите изменить тип текстового поля на дату.

Для изменения количества осколков можно использовать API Shrink. Shrink API относительно дешевле, чем операция reindex.

Чтобы изменить настройку / отображение индекса существующего индекса, сначала создайте целевой указатель с нужными настройками и используйте Reindex API, как показано ниже:

POST _reindex
 {
   "source": {
     "index": "source_index"
   },
   "dest": {
     "index": "dest_index"
   }
 }

Объединение документов по одному или нескольким индексам

Вы можете объединить документы из одного или нескольких индексов в один большой индекс, как показано ниже:

POST _reindex
 {
   "source": {
     "index": [
       "source_index_1",
       "source_index_2"
     ]
   },
   "dest": {
     "index": "dest_index"
   }
 }

Копирование только отсутствующих документов

Вы можете скопировать только недостающие документы из одного индекса в другой, установив op_type . Любой существующий документ с тем же идентификатором получит конфликт. Установив конфликты в запросе, reindex будет игнорировать существующие документы, как показано ниже:

POST _reindex
 {
   "conflicts": "proceed",
   "source": {
     "index": "source_index"
   },
   "dest": {
     "index": "dest_index",
     "op_type": "create"
   }
 }

Копирование подмножества документов в новый индекс

Вы можете использовать Reindex API для копирования только документов, соответствующих запросу. Предположим, у вас есть индекс, который содержит журнал приложения, и вы хотите скопировать только ошибки в новый индекс. Вы можете использовать reindex, как показано ниже:

POST _reindex
 {
   "source": {
     "index": "source_index_1",
     "type": "log",
     "query": {
       "term": {
         "level": "ERROR"
       }
     }
   },
   "dest": {
     "index": "dest_index"
   }
 }

Копирование верхних N документов

Вы можете использовать Reindex API для копирования первых N документов на основе поля. Предположим, вы хотите скопировать только последние 1000 документов на основе поля timestamp в новый индекс:

POST _reindex
 {
   "size": 1000,
   "source": {
     "index": "source_index",
     "sort": {
       "timestamp": "desc"
     }
   },
   "dest": {
     "index": "dest_index"
   }
 }

Копирование подмножества полей в новый индекс

Вы можете скопировать подмножество полей в документе, как показано ниже:

POST _reindex
 {
   "source": {
     "index": [
       "source_index_1"
     ],
     "_source": [
       "field1",
       "field2"
     ]
   },
   "dest": {
     "index": "dest_index"
   }
 }

В зависимости от того, насколько большой индекс источника, reindex может быть дорогостоящей операцией. Рекомендуется отключить все реплики по индексу назначения и включить их после завершения переиндексации.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *