Spec-Zone.ru › Elasticsearch 7
›Руководство по Elasticsearch [7.17] ›REST API ›API документов

API переиндексации

Копирует документы из источника в место назначения.

Источником может быть любой существующий индекс, алиас или поток данных. Назначение должно отличаться от источника. Например, вы не можете переиндексировать поток данных в сам себя.

Для переиндексации требуется, чтобы _source был включен для всех документов в источнике.

Назначение должно быть настроено как нужно перед вызовом _reindex. Переиндексация не копирует настройки из источника или его связанной шаблона.

Карты, количество фрагментов, реплики и так далее должны быть настроены заранее.

POST _reindex
{
  "source": {
    "index": "my-index-000001"
  },
  "dest": {
    "index": "my-new-index-000001"
  }
}

Запрос

POST /_reindex

Предварительные условия

  • Если функции безопасности Elasticsearch включены, у вас должны быть следующие права безопасности:

    • Права read индекса для потока данных, индекса или алиаса источника.
    • Права write индекса для потока данных, индекса или алиаса индекса назначения.
    • Чтобы автоматически создать поток данных или индекс с запросом API переиндексации, у вас должны быть права auto_configure, create_index или manage индекса для потока данных, индекса или алиаса назначения.
    • Если переиндексирование выполняется из удаленного кластера, у source.remote.user должны быть права monitor кластера и права read индекса для потока данных, индекса или алиаса источника.
  • Если переиндексирование выполняется из удаленного кластера, вы должны явно разрешить удаленный хост в настройке reindex.remote.whitelist параметра elasticsearch.yml. См. Переиндексирование из удалённого источника.
  • Автоматическое создание потока данных требует соответствующего шаблона индекса с включенным потоком данных. См. Настройка потока данных.

Описание

Извлекает источник документа из исходного индекса и индексирует документы в целевой индекс. Можно скопировать все документы в целевой индекс или переиндексировать подмножество документов.

Как и _update_by_query, _reindex получает моментальную копию исходных данных, но целевой индекс должен быть различным, чтобы конфликты версий были маловероятны. Элемент dest можно настроить как в API индексации для управления оптимистическим контролем одновременного доступа. Пропуск version_type или установка его значения в internal заставляет Elasticsearch бездумно копировать документы в целевой индекс, перезаписывая любые документы с одинаковым идентификатором.

Установка значения version_type в external заставляет Elasticsearch сохранить version из источника, создать отсутствующие документы и обновить документы, версия которых в целевом индексе старше, чем в исходном.

Установка значения op_type в create заставляет _reindex создавать только отсутствующие документы в целевом индексе. Все существующие документы вызовут конфликт версий.

Так как потоки данных являются только для добавления, любой запрос переиндексации в целевой поток данных должен иметь значение op_type `create`. Переиндексация может только добавлять новые документы в целевой поток данных. Она не может обновлять существующие документы в целевом потоке данных.

По умолчанию конфликты версий прерывают процесс _reindex. Чтобы продолжить переиндексацию при наличии конфликтов, установите параметр тела запроса "conflicts" в proceed. В этом случае ответ содержит количество обнаруженных конфликтов версий. Обратите внимание, что обработка других типов ошибок не зависит от параметра "conflicts". Кроме того, если вы выберете подсчёт конфликтов версий, операция может попытаться переиндексировать больше документов из источника, чем max_docs, пока успешно не переиндексирует max_docs документов в целевой индекс или не обработает все документы из запроса к источнику.

Асинхронное выполнение переиндексации

Если запрос содержит wait_for_completion=false, Elasticsearch выполняет некоторые предварительные проверки, запускает запрос и возвращает task, который можно использовать для отмены или получения статуса задачи. Elasticsearch создаёт запись об этой задаче как документ в _tasks/<task_id>. После завершения работы с задачей необходимо удалить документ задачи, чтобы Elasticsearch мог освободить место.

Переиндексация из нескольких источников

Если у вас много источников для переиндексации, лучше переиндексировать их по одному, а не использовать шаблон glob для выбора нескольких источников. Таким образом, можно возобновить процесс в случае ошибок, удалив частично завершённый источник и начав заново. Это также упрощает распараллеливание процесса: разделите список источников для переиндексации и запустите каждый список параллельно.

Для этого хорошо подходят одноразовые скрипты bash:

for index in i1 i2 i3 i4 i5; do
  curl -HContent-Type:application/json -XPOST localhost:9200/_reindex?pretty -d'{
    "source": {
      "index": "'$index'"
    },
    "dest": {
      "index": "'$index'-reindexed"
    }
  }'
done

Урегулирование

Установите requests_per_second на любое положительное десятичное число (1.4, 6, 1000 и т. д.) для ограничения скорости, с которой _reindex отправляет порции операций индексирования. Запросы ограничиваются добавлением временной задержки к каждой порции. Для отключения урегулирования установите requests_per_second в -1.

Урегулирование выполняется путём добавления задержки между порциями, чтобы scroll, используемое _reindex внутри, получило таймаут, учитывающий задержку. Время задержки — это разница между размером порции, делённой на requests_per_second, и временем записи. По умолчанию размер порции равен 1000, поэтому если requests_per_second установлено в 500:

target_time = 1000 / 500 per second = 2 seconds
wait_time = target_time - write_time = 2 seconds - .5 seconds = 1.5 seconds

Поскольку порция отправляется как единственный запрос _bulk, большие размеры порций приводят к созданию Elasticsearch большого количества запросов, а затем к ожиданию некоторого времени перед началом следующей порции. Это «импульсный», а не «гладкий» режим работы.

Изменение урегулирования

Значение requests_per_second можно изменить во время выполнения переиндексации с помощью API _rethrottle:

POST _reindex/r1A2WoRbTwKZ516z6NEs5A:36619/_rethrottle?requests_per_second=-1

Идентификатор задачи можно найти с помощью API задач.

Как и при установке значения в API переиндексации, requests_per_second может быть либо -1 для отключения урегулирования, либо любым десятичным числом, таким как 1.7 или 12, для урегулирования на этом уровне. Изменение урегулирования, ускоряющее запрос, вступает в силу немедленно, но изменение урегулирования, замедляющее запрос, вступает в силу после завершения текущей порции. Это предотвращает временные ограничения на прокрутку.

Разбиение

Переиндексация поддерживает разбиение результатов прокрутки для распараллеливания процесса переиндексации. Это распараллеливание может повысить эффективность и предоставить удобный способ разбиения запроса на более мелкие части.

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

Ручное разбиение

Разбейте запрос переиндексации вручную, предоставив идентификатор разбиения и общее число разбиений каждому запросу:

POST _reindex
{
  "source": {
    "index": "my-index-000001",
    "slice": {
      "id": 0,
      "max": 2
    }
  },
  "dest": {
    "index": "my-new-index-000001"
  }
}
POST _reindex
{
  "source": {
    "index": "my-index-000001",
    "slice": {
      "id": 1,
      "max": 2
    }
  },
  "dest": {
    "index": "my-new-index-000001"
  }
}

Вы можете проверить это, выполнив:

GET _refresh
POST my-new-index-000001/_search?size=0&filter_path=hits.total

что приводит к разумному результату total, например такому:

{
  "hits": {
    "total" : {
        "value": 120,
        "relation": "eq"
    }
  }
}
Автоматическое разбиение

Вы также можете позволить _reindex автоматически распараллелить процесс с использованием разбиения результатов прокрутки по _id. Используйте slices для указания количества разбиений:

POST _reindex?slices=5&refresh
{
  "source": {
    "index": "my-index-000001"
  },
  "dest": {
    "index": "my-new-index-000001"
  }
}

Вы также можете проверить, что это работает:

POST my-new-index-000001/_search?size=0&filter_path=hits.total

что приводит к разумному результату total, например такому:

{
  "hits": {
    "total" : {
        "value": 120,
        "relation": "eq"
    }
  }
}

Установка значения slices в auto позволит Elasticsearch выбрать разумное количество разбиений для большинства индексов. Если вы используете ручное разбиение или настраиваете автоматическое разбиение, воспользуйтесь следующими рекомендациями.

Производительность запросов наиболее эффективна, когда количество slices равно числу фрагментов в индексе. Если это число велико (например, 500), выберите меньшее значение, так как слишком много slices повлияет на производительность. Установка значения slices выше числа фрагментов обычно не улучшает эффективность и добавляет избыточность.

Производительность индексирования масштабируется линейно с доступными ресурсами с увеличением количества разбиений.

От того, производительность запросов или индексирования доминирует во времени выполнения, зависит от индексируемых документов и ресурсов кластера.

Переиндексация маршрутизации

По умолчанию, если _reindex видит документ с маршрутизацией, то маршрутизация сохраняется, если она не изменена скриптом. Вы можете задать routing в запросе dest, чтобы изменить это:

keep
Устанавливает маршрутизацию в массивном запросе, отправляемом для каждого совпадения, равной маршрутизации этого совпадения. Это значение по умолчанию.
discard
Устанавливает маршрутизацию в массивном запросе, отправляемом для каждого совпадения, равной значению null.
=<some text>
Устанавливает маршрутизацию в массивном запросе, отправляемом для каждого совпадения, равной всем символам после =.

Например, вы можете использовать следующий запрос, чтобы скопировать все документы из source с именем компании cat в dest с маршрутизацией, установленной в cat.

POST _reindex
{
  "source": {
    "index": "source",
    "query": {
      "match": {
        "company": "cat"
      }
    }
  },
  "dest": {
    "index": "dest",
    "routing": "=cat"
  }
}

По умолчанию _reindex использует пакет скроллинга по 1000 документов. Вы можете изменить размер пакета с помощью поля size в элементе source:

POST _reindex
{
  "source": {
    "index": "source",
    "size": 100
  },
  "dest": {
    "index": "dest",
    "routing": "=cat"
  }
}

Переиндексация с использованием конвейера ingest

Переиндексация также может использовать функцию конвейеров ingest, указав pipeline, как показано ниже:

POST _reindex
{
  "source": {
    "index": "source"
  },
  "dest": {
    "index": "dest",
    "pipeline": "some_ingest_pipeline"
  }
}

Параметры запроса

refresh
(Необязательно, логическое значение) Если true, запрос обновляет затронутые фрагменты, чтобы сделать это действие видимым для поиска. Значение по умолчанию — false.
timeout

(Необязательно, единицы времени) Период ожидания индексирования следующих операций:

  • Автоматическое создание индексов
  • Обновления динамического отображения
  • Ожидание активных фрагментов

Значение по умолчанию — 1m (одна минута). Это гарантирует, что Elasticsearch подождет по крайней мере указанное время, прежде чем завершиться ошибкой. Фактическое время ожидания может быть больше, особенно когда происходит несколько ожиданий.

wait_for_active_shards

(Необязательно, строка) Количество активных копий фрагментов, необходимых для продолжения операции. Устанавливается в all или любое положительное целое число до общего количества фрагментов в индексе (number_of_replicas+1). По умолчанию: 1, первичный фрагмент.

См. Активные фрагменты.

wait_for_completion
(Необязательно, логическое значение) Если true, запрос блокируется до завершения операции. По умолчанию — true.
requests_per_second
(Необязательно, целое число) Скорость обработки запроса в подзапросах в секунду. По умолчанию — -1 (нет ограничения).
require_alias
(Необязательно, логическое значение) Если true, целевой индекс должен быть алиасом индекса. По умолчанию — false.
scroll
(Необязательно, единицы времени) Указывает, как долго должна поддерживаться согласованная версия индекса для поиска с прокруткой.
slices
(Необязательно, целое число) Количество фрагментов, на которые необходимо разбить задачу. По умолчанию 1, что означает, что задача не разбивается на подзадачи.
max_docs
(Необязательно, целое число) Максимальное количество документов для обработки. По умолчанию обрабатываются все документы.

Тело запроса

conflicts
(Необязательно, перечисление) Установите значение proceed, чтобы продолжить переиндексацию, даже если есть конфликты. По умолчанию значение abort.
max_docs
(Необязательно, целое число) Максимальное количество документов для переиндексации. Если conflicts равно proceed, переиндексация может попытаться переиндексировать больше документов из источника, чем max_docs, пока не будет успешно индексировано max_docs документов в целевой индекс, или пока не будут обработаны все документы из запроса.
source
index
(Обязательно, строка) Название потока данных, индекса или псевдонима, из которого вы копируете. Также принимает список, разделенный запятыми, для переиндексации из нескольких источников.
query
(Необязательно, объект запроса) Указывает документы для переиндексации с использованием Query DSL.
remote
host
(Необязательно, строка) URL удалённого экземпляра Elasticsearch, из которого нужно индексировать. Требуется при индексировании из удалённого источника.
username
(Необязательно, строка) Имя пользователя для аутентификации с удалённым узлом.
password
(Необязательно, строка) Пароль для аутентификации с удалённым узлом.
socket_timeout
(Необязательно, единицы измерения времени) Таймаут чтения удалённого сокета. По умолчанию 30 секунд.
connect_timeout
(Необязательно, единицы измерения времени) Таймаут подключения к удалённому узлу. По умолчанию 30 секунд.
size
(Необязательно, целое число) Количество документов для индексации в одной порции. Используйте при индексировании из удалённого источника, чтобы гарантировать, что порции помещаются в буфер нативной памяти, который имеет максимальный размер по умолчанию 100 МБ.
slice
id
(Необязательно, целое число) ID слайса для ручной сегментации.
max
(Необязательно, целое число) Общее количество слайсов.
sort

(Необязательно, список) Список пар, разделённых запятыми, для сортировки по ним перед индексированием. Используйте вместе с max_docs для управления тем, какие документы переиндексируются.

Устарело в 7.6.

Сортировка в переиндексации устарела. Сортировка в переиндексации никогда не гарантировала индексацию документов в порядке и мешает дальнейшему развитию переиндексации, например, повышению отказоустойчивости и производительности. Если используется в сочетании с max_docs, рассмотрите использование фильтра запроса вместо этого.

_source
(Необязательно, строка) Если true, переиндексирует все поля источника. Установите в список, чтобы переиндексировать выбранные поля. По умолчанию true.
dest
index
(Обязательно, строка) Название потока данных, индекса или псевдонима индекса, в который вы копируете.
version_type
(Необязательно, перечисление) Версия для использования в операции индексирования. Допустимые значения: internal, external, external_gt, external_gte. Дополнительную информацию см. в разделе Типы версий.
op_type

(Необязательно, перечисление) Установите в create, чтобы индексировать только те документы, которые ещё не существуют (поместить, если отсутствует). Допустимые значения: index, create. По умолчанию index.

Чтобы переиндексировать в целевой поток данных, этот аргумент должен быть create.

type

(Необязательно, строка) [6.0.0] Устарело в 6.0.0. Типы устарели и находятся в процессе удаления. См. Удаление типов отображения. Тип документа для переиндексированных документов. По умолчанию _doc.

Типы в исходных индексах всегда игнорируются, даже при отсутствии явного указания целевого type. Если явно указан целевой type, указанный тип должен совпадать с типом в целевом индексе или быть не указанным или иметь специальное значение _doc. Подробнее см. Удаление типов отображения.

script
source
(Необязательно, строка) Скрипт для обновления исходных данных или метаданных документа при переиндексировании.
lang
(Необязательно, перечисление) Язык скрипта: painless, expression, mustache, java. Для получения дополнительной информации см. Скрипты.

Тело ответа

took
(целое число) Общее время выполнения операции в миллисекундах.
timed_out
(логическое значение) Этот флаг установлен в значение true, если какой-либо из запросов во время переиндексации истек по таймауту.
total
(целое число) Количество успешно обработанных документов.
updated
(целое число) Количество успешно обновлённых документов, т.е. документ с таким же ID уже существовал до обновления при переиндексировании.
created
(целое число) Количество успешно созданных документов.
deleted
(целое число) Количество успешно удалённых документов.
batches
(целое число) Количество полученных ответов по скроллу при переиндексировании.
noops
(целое число) Количество документов, которые были проигнорированы, потому что скрипт, используемый для переиндексации, вернул значение noop для ctx.op.
version_conflicts
(целое число) Количество столкновений версий, с которыми столкнулась переиндексация.
retries
(целое число) Количество попыток повторной обработки, предпринятых переиндексированием. bulk — количество перепробованных действий в массовой обработке, а search — количество перепробованных поисковых действий.
throttled_millis
(целое число) Количество миллисекунд, в течение которых запрос находился в ожидании для соответствия requests_per_second.
requests_per_second
(целое число) Количество запросов в секунду, фактически выполненных при переиндексировании.
throttled_until_millis
(целое число) Это поле всегда должно быть равно нулю в ответе _reindex. Оно имеет значение только при использовании API задач, где оно указывает следующий момент времени (в миллисекундах с начала эпохи), когда запрос, ограниченный по производительности, будет запущен снова для соответствия requests_per_second.
failures
(массив) Массив ошибок, если во время процесса возникли необработанные ошибки. Если этот массив не пустой, запрос был прерван из-за этих ошибок. Переиндексация реализована с помощью порций, и любая ошибка приводит к прерыванию всего процесса, но все ошибки в текущей порции собираются в массив. Можно использовать опцию conflicts, чтобы предотвратить прерывание переиндексации при столкновениях версий.

Примеры

Переиндексация выбранных документов с запросом

Вы можете ограничить документы, добавив запрос в source. Например, следующий запрос копирует только документы с user.id kimchy в my-new-index-000001:

POST _reindex
{
  "source": {
    "index": "my-index-000001",
    "query": {
      "term": {
        "user.id": "kimchy"
      }
    }
  },
  "dest": {
    "index": "my-new-index-000001"
  }
}

Переиндексация выбранных документов с max_docs

Вы можете ограничить количество обрабатываемых документов, задав max_docs. Например, этот запрос копирует один документ из my-index-000001 в my-new-index-000001:

POST _reindex
{
  "max_docs": 1,
  "source": {
    "index": "my-index-000001"
  },
  "dest": {
    "index": "my-new-index-000001"
  }
}

Переиндексация из нескольких источников

Атрибут index в source может быть списком, позволяя копировать из множества источников в одном запросе. Это скопирует документы из индексов my-index-000001 и my-index-000002:

POST _reindex
{
  "source": {
    "index": ["my-index-000001", "my-index-000002"]
  },
  "dest": {
    "index": "my-new-index-000002"
  }
}

API переиндексации не пытается обрабатывать коллизии ID, поэтому последний записанный документ «побеждает», но порядок обычно непредсказуем, поэтому не рекомендуется полагаться на это поведение. Вместо этого убедитесь, что ID уникальны с помощью скрипта.

Переиндексация выбранных полей с фильтром источника

Вы можете использовать фильтрацию источников для переиндексации подмножества полей в исходных документах. Например, следующий запрос переиндексирует только поля user.id и _doc каждого документа:

POST _reindex
{
  "source": {
    "index": "my-index-000001",
    "_source": ["user.id", "_doc"]
  },
  "dest": {
    "index": "my-new-index-000001"
  }
}

Переиндексация для изменения имени поля

_reindex может использоваться для создания копии индекса с переименованными полями. Предположим, вы создали индекс, содержащий документы, которые выглядят так:

POST my-index-000001/_doc/1?refresh
{
  "text": "words words",
  "flag": "foo"
}

но вам не нравится имя flag и вы хотите заменить его на tag. _reindex может создать для вас другой индекс:

POST _reindex
{
  "source": {
    "index": "my-index-000001"
  },
  "dest": {
    "index": "my-new-index-000001"
  },
  "script": {
    "source": "ctx._source.tag = ctx._source.remove(\"flag\")"
  }
}

Теперь вы можете получить новый документ:

GET my-new-index-000001/_doc/1

который вернет:

{
  "found": true,
  "_id": "1",
  "_index": "my-new-index-000001",
  "_type": "_doc",
  "_version": 1,
  "_seq_no": 44,
  "_primary_term": 1,
  "_source": {
    "text": "words words",
    "tag": "foo"
  }
}

Переиндексация ежедневных индексов

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

Предполагая, что у вас есть индексы, содержащие документы, подобные:

PUT metricbeat-2016.05.30/_doc/1?refresh
{"system.cpu.idle.pct": 0.908}
PUT metricbeat-2016.05.31/_doc/1?refresh
{"system.cpu.idle.pct": 0.105}

Новый шаблон для индексов metricbeat-* уже загружен в Elasticsearch, но применяется только к вновь созданным индексам. Painless можно использовать для переиндексации существующих документов и применения нового шаблона.

Нижеприведенный скрипт извлекает дату из имени индекса и создает новый индекс с добавленным -1. Все данные из metricbeat-2016.05.31 будут переиндексированы в metricbeat-2016.05.31-1.

POST _reindex
{
  "source": {
    "index": "metricbeat-*"
  },
  "dest": {
    "index": "metricbeat"
  },
  "script": {
    "lang": "painless",
    "source": "ctx._index = 'metricbeat-' + (ctx._index.substring('metricbeat-'.length(), ctx._index.length())) + '-1'"
  }
}

Теперь все документы из предыдущих индексов metricbeat можно найти в индексах *-1.

GET metricbeat-2016.05.30-1/_doc/1
GET metricbeat-2016.05.31-1/_doc/1

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

Извлечение случайной подвыборки источника

_reindex можно использовать для извлечения случайной подвыборки источника для тестирования:

POST _reindex
{
  "max_docs": 10,
  "source": {
    "index": "my-index-000001",
    "query": {
      "function_score" : {
        "random_score" : {},
        "min_score" : 0.9    
      }
    }
  },
  "dest": {
    "index": "my-new-index-000001"
  }
}

Вам может потребоваться настроить min_score в зависимости от относительного количества данных, извлеченных из источника.

Изменение документов во время переиндексации

Как и _update_by_query, _reindex поддерживает скрипт, который изменяет документ. В отличие от _update_by_query, скрипт может изменять метаданные документа. В этом примере версия исходного документа увеличивается:

POST _reindex
{
  "source": {
    "index": "my-index-000001"
  },
  "dest": {
    "index": "my-new-index-000001",
    "version_type": "external"
  },
  "script": {
    "source": "if (ctx._source.foo == 'bar') {ctx._version++; ctx._source.remove('foo')}",
    "lang": "painless"
  }
}

Точно так же, как и в _update_by_query, вы можете установить ctx.op для изменения операции, выполняемой в пункте назначения:

noop
Установите ctx.op = "noop", если ваш скрипт решит, что документ не должен быть индексирован в пункте назначения. Эта бездействующая операция будет отображена в счетчике noop в теле ответа.
delete
Установите ctx.op = "delete", если ваш скрипт решит, что документ должен быть удален из пункта назначения. Удаление будет отражено в счетчике deleted в теле ответа.

Установка ctx.op на любое другое значение приведет к ошибке, как и установка любого другого поля в ctx.

Подумайте о возможностях! Просто будьте осторожны; вы можете изменить:

  • _id
  • _index
  • _version
  • _routing

Установка _version на null или удаление его из карты ctx эквивалентно тому, как если бы вы не отправили версию в запросе индексирования; это приведет к перезаписи документа в пункте назначения независимо от версии в целевом документе или типа версии, используемого в запросе _reindex.

Переиндексация с удалённого узла

Переиндексация поддерживает переиндексацию с удалённого кластера Elasticsearch:

POST _reindex
{
  "source": {
    "remote": {
      "host": "http://otherhost:9200",
      "username": "user",
      "password": "pass"
    },
    "index": "my-index-000001",
    "query": {
      "match": {
        "test": "data"
      }
    }
  },
  "dest": {
    "index": "my-new-index-000001"
  }
}

Параметр host должен содержать схему, хост, порт (например, https://otherhost:9200), и необязательный путь (например, https://otherhost:9200/proxy). Параметры username и password являются необязательными, и если они присутствуют, то _reindex будет подключаться к удалённому узлу Elasticsearch с использованием базовой аутентификации. Не забудьте использовать https при использовании базовой аутентификации, иначе пароль будет отправлен в открытом виде. Существует ряд настроек для настройки поведения подключения https.

Удалённые хосты должны быть явно разрешены в файле elasticsearch.yml с помощью свойства reindex.remote.whitelist. Оно может быть установлено в виде списка разрешённых удалённых комбинаций host и port, разделённых запятыми. Схема игнорируется, используются только хост и порт. Например:

reindex.remote.whitelist: [otherhost:9200, another:9200, 127.0.10.*:9200, localhost:*"]

Список разрешённых хостов должен быть настроен на всех узлах, которые будут координировать переиндексацию.

Эта функция должна работать с удалёнными кластерами любой версии Elasticsearch, с которой вы можете столкнуться. Это позволит вам обновляться с любой версии Elasticsearch до текущей версии, переиндексировав данные с кластера старой версии.

Elasticsearch не поддерживает обратную совместимость между основными версиями. Например, вы не можете переиндексировать данные с кластера 7.x в кластер 6.x.

Чтобы включить запросы, отправленные в более старые версии Elasticsearch, параметр query передаётся непосредственно удалённому хосту без проверки или модификации.

Переиндексация с удалённых кластеров не поддерживает ручное или автоматическое разделение.

Переиндексация с удалённого сервера использует буфер в оперативной памяти, размер которого по умолчанию составляет максимум 100 МБ. Если удалённый индекс содержит очень большие документы, вам потребуется использовать меньший размер пакета. В примере ниже размер пакета установлен на 10, что очень, очень мало.

POST _reindex
{
  "source": {
    "remote": {
      "host": "http://otherhost:9200"
    },
    "index": "source",
    "size": 10,
    "query": {
      "match": {
        "test": "data"
      }
    }
  },
  "dest": {
    "index": "dest"
  }
}

Также возможно установить таймаут чтения сокета для удалённого подключения с помощью поля socket_timeout и таймаут подключения с помощью поля connect_timeout. Оба значения по умолчанию составляют 30 секунд. В этом примере таймаут чтения сокета установлен на одну минуту, а таймаут подключения на 10 секунд:

POST _reindex
{
  "source": {
    "remote": {
      "host": "http://otherhost:9200",
      "socket_timeout": "1m",
      "connect_timeout": "10s"
    },
    "index": "source",
    "query": {
      "match": {
        "test": "data"
      }
    }
  },
  "dest": {
    "index": "dest"
  }
}

Настройка параметров SSL

Переиндексация с удалённого узла поддерживает настраиваемые параметры SSL. Они должны быть указаны в файле elasticsearch.yml, за исключением защищённых параметров, которые вы добавляете в хранилище ключей Elasticsearch. Невозможно настроить SSL в теле запроса _reindex.

Поддерживаются следующие настройки:

reindex.ssl.certificate_authorities
Список путей к файлам сертификатов в формате PEM, которым следует доверять. Вы не можете указать и reindex.ssl.certificate_authorities и reindex.ssl.truststore.path.
reindex.ssl.truststore.path
Путь к файлу хранилища ключей Java, содержащему сертификаты для доверия. Это хранилище ключей может быть в формате "JKS" или "PKCS#12". Вы не можете указать и reindex.ssl.certificate_authorities и reindex.ssl.truststore.path.
reindex.ssl.truststore.password
Пароль к хранилищу доверия (reindex.ssl.truststore.path). Эта настройка не может использоваться с reindex.ssl.truststore.secure_password.
reindex.ssl.truststore.secure_password (Защищённые)
Пароль к хранилищу доверия (reindex.ssl.truststore.path). Эта настройка не может использоваться с reindex.ssl.truststore.password.
reindex.ssl.truststore.type
Тип хранилища доверия (reindex.ssl.truststore.path). Должен быть либо jks, либо PKCS12. Если путь к хранилищу доверия заканчивается на ".p12", ".pfx" или "pkcs12", эта настройка по умолчанию равна PKCS12. В противном случае, она по умолчанию равна jks.
reindex.ssl.verification_mode
Указывает тип проверки, предназначенной для защиты от атак "человек посередине" и подделки сертификатов. Одно из значений: full (проверить имя хоста и путь сертификата), certificate (проверить путь сертификата, но не имя хоста) или none (не выполнять проверки - это крайне не рекомендуется в производственных средах). По умолчанию значение равно full.
reindex.ssl.certificate
Указывает путь к PEM-кодированному сертификату (или цепочке сертификатов) для аутентификации HTTP-клиента (если это необходимо удалённому кластеру). Эта настройка требует, чтобы и reindex.ssl.key также была установлена. Вы не можете указать и reindex.ssl.certificate и reindex.ssl.keystore.path.
reindex.ssl.key
Указывает путь к PEM-кодированному закрытому ключу, связанному с сертификатом, используемым для аутентификации клиента (reindex.ssl.certificate). Вы не можете указать и reindex.ssl.key и reindex.ssl.keystore.path.
reindex.ssl.key_passphrase
Указывает пароль для дешифрования PEM-кодированного закрытого ключа (reindex.ssl.key), если он зашифрован. Не может использоваться с reindex.ssl.secure_key_passphrase.
reindex.ssl.secure_key_passphrase (Защищённые)
Указывает пароль для дешифрования PEM-кодированного закрытого ключа (reindex.ssl.key), если он зашифрован. Не может использоваться с reindex.ssl.key_passphrase.
reindex.ssl.keystore.path
Указывает путь к хранилищу ключей, содержащему закрытый ключ и сертификат, используемые для аутентификации HTTP-клиента (если это необходимо удалённому кластеру). Это хранилище ключей может быть в формате "JKS" или "PKCS#12". Вы не можете указать и reindex.ssl.key и reindex.ssl.keystore.path.
reindex.ssl.keystore.type
Тип хранилища ключей (reindex.ssl.keystore.path). Должен быть либо jks, либо PKCS12. Если путь к хранилищу ключей заканчивается на ".p12", ".pfx" или "pkcs12", эта настройка по умолчанию равна PKCS12. В противном случае, она по умолчанию равна jks.
reindex.ssl.keystore.password
Пароль к хранилищу ключей (reindex.ssl.keystore.path). Эта настройка не может использоваться с reindex.ssl.keystore.secure_password.
reindex.ssl.keystore.secure_password (Защищённые)
Пароль к хранилищу ключей (reindex.ssl.keystore.path). Эта настройка не может использоваться с reindex.ssl.keystore.password.
reindex.ssl.keystore.key_password
Пароль к ключу в хранилище ключей (reindex.ssl.keystore.path). По умолчанию равен паролю хранилища ключей. Эта настройка не может использоваться с reindex.ssl.keystore.secure_key_password.
reindex.ssl.keystore.secure_key_password (Защищённые)
Пароль к ключу в хранилище ключей (reindex.ssl.keystore.path). По умолчанию равен паролю хранилища ключей. Эта настройка не может использоваться с reindex.ssl.keystore.key_password.

© 2023-2025 Elasticsearch
As of September 2024, Elasticsearch is available under a choice of three licenses: the Server Side Public License (SSPL), the Elastic License, or the AGPLv3 (OSI approved).
Elasticsearch and the Elasticsearch logo are trademarks of Elasticsearch B.V., registered in the U.S. and in other countries.
https://www.elastic.co/guide/en/elasticsearch/reference/7.17/docs-reindex.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API