Spec-Zone.ru › Elasticsearch 7
›Elasticsearch Guide [7.17] ›Ingest pipelines ›Ingest processor reference

Обработчик foreach

Обрабатывает элементы в массиве неизвестной длины.

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

Обработчик внутри обработчика foreach работает в контексте элемента массива и помещает его в метаданные ingest под ключом _ingest._value. Если элемент массива является JSON-объектом, он содержит все непосредственные поля этого JSON-объекта. а если вложенный объект является значением, он просто содержит это значение. Обратите внимание, что если обработчик перед обработчиком foreach использовал ключ _ingest._value, то указанное значение не будет доступно обработчику внутри обработчика foreach. Обработчик foreach восстанавливает исходное значение, так что это значение доступно обработчикам после обработчика foreach.

Обратите внимание, что любые другие поля из документа доступны и могут быть изменены, как и с другими обработчиками. Этот обработчик просто помещает текущий элемент массива, который читается, в атрибут метаданных ingest _ingest._value, чтобы он мог быть предварительно обработан.

Если обработчик foreach не может обработать элемент внутри массива, и не указан обработчик on_failure, то он прерывает выполнение и оставляет массив неизменным.

Таблица 19. Параметры Foreach

Имя Обязательно По умолчанию Описание

field

да

-

Поле массива

processor

да

-

Обработчик для выполнения над каждым полем

ignore_missing

нет

false

Если true и field не существуют или являются null, обработчик спокойно завершает работу, не изменяя документ

description

нет

-

Описание обработчика. Полезно для описания цели обработчика или его конфигурации.

if

нет

-

Условное выполнение обработчика. См. Условное выполнение обработчика.

ignore_failure

нет

false

Игнорировать ошибки для обработчика. См. Обработка ошибок в конвейере.

on_failure

нет

-

Обрабатывать ошибки для обработчика. См. Обработка ошибок в конвейере.

tag

нет

-

Идентификатор обработчика. Полезен для отладки и метрик.

Предположим следующий документ:

{
  "values" : ["foo", "bar", "baz"]
}

Когда этот обработчик foreach работает с этим образцом документа:

{
  "foreach" : {
    "field" : "values",
    "processor" : {
      "uppercase" : {
        "field" : "_ingest._value"
      }
    }
  }
}

Тогда документ будет выглядеть так после предварительной обработки:

{
  "values" : ["FOO", "BAR", "BAZ"]
}

Давайте посмотрим на другой пример:

{
  "persons" : [
    {
      "id" : "1",
      "name" : "John Doe"
    },
    {
      "id" : "2",
      "name" : "Jane Doe"
    }
  ]
}

В этом случае, поле id нужно удалить, поэтому используется следующий обработчик foreach:

{
  "foreach" : {
    "field" : "persons",
    "processor" : {
      "remove" : {
        "field" : "_ingest._value.id"
      }
    }
  }
}

После предварительной обработки результат:

{
  "persons" : [
    {
      "name" : "John Doe"
    },
    {
      "name" : "Jane Doe"
    }
  ]
}

У обработчика может быть определение on_failure. Например, поле id может отсутствовать во всех объектах person. Вместо того, чтобы прерывать запрос индексации, вы можете использовать блок on_failure, чтобы отправить документ в индекс failure_index для последующего анализа:

{
  "foreach" : {
    "field" : "persons",
    "processor" : {
      "remove" : {
        "field" : "_value.id",
        "on_failure" : [
          {
            "set" : {
              "field": "_index",
              "value": "failure_index"
            }
          }
        ]
      }
    }
  }
}

В этом примере, если обработчик remove завершится ошибкой, элементы массива, которые были обработаны до этого момента, будут обновлены.

Еще один пример расширенного использования можно найти в документации по обработчику attachment.

© 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/foreach-processor.html

Spec-Zone.ru

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