Spec-Zone.ru › Elasticsearch 8
›Elasticsearch Guide [8.17] ›Watcher ›Watcher inputs

Ввод данных поиска Watcher

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

В объекте request ввода поиска вы указываете:

  • Индексы, которые требуется искать
  • Тип поиска
  • Тело запроса поиска

Тело запроса поиска поддерживает полную Elasticsearch Query DSL — оно такое же, как тело запроса Elasticsearch _search.

Например, следующий ввод извлекает все event документы из индекса logs:

"input" : {
  "search" : {
    "request" : {
      "indices" : [ "logs" ],
      "body" : {
        "query" : { "match_all" : {}}
      }
    }
  }
}

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

{
  "input" : {
    "search" : {
      "request" : {
        "indices" : [ "<stock-quotes-{now/d}>" ],
        "body" : {
          "size" : 1,
          "sort" : {
            "timestamp" : { "order" : "desc"}
          },
          "query" : {
            "term" : { "symbol" : "vix"}
          }
        }
      }
    }
  }
}

Извлечение определенных полей

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

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

"input": {
    "search": {
      "request": {
        "indices": [ ".watcher-history*" ]
      },
      "extract": [ "hits.total.value" ]
    }
  },

Использование шаблонов

Ввод search поддерживает шаблоны поиска. Например, следующий фрагмент ссылается на индексированный шаблон, называемый my_template, и передает значение 23 для заполнения параметра value шаблона:

{
  "input" : {
    "search" : {
      "request" : {
        "indices" : [ "logs" ],
        "template" : {
          "id" : "my_template",
          "params" : {
            "value" : 23
          }
        }
      }
    }
  }
  ...
}

Применение условий

Ввод search часто используется вместе с условием script. Например, следующий фрагмент добавляет условие для проверки того, вернул ли поиск более пяти совпадений:

{
  "input" : {
    "search" : {
      "request" : {
        "indices" : [ "logs" ],
        "body" : {
          "query" : { "match_all" : {} }
        }
      }
    }
  },
  "condition" : {
    "compare" : { "ctx.payload.hits.total" : { "gt" : 5 }}
  }
  ...
}

Доступ к результатам поиска

Условия, преобразования и действия могут получить доступ к результатам поиска через контекст выполнения наблюдения. Например:

  • Чтобы загрузить все результаты поиска в тело электронного письма, используйте ctx.payload.hits.
  • Чтобы сослаться на общее количество совпадений, используйте ctx.payload.hits.total.
  • Чтобы получить доступ к определенному совпадению, используйте его индекс массива с нулевым началом. Например, чтобы получить третье совпадение, используйте ctx.payload.hits.hits.2.
  • Чтобы получить значение поля из определенного совпадения, используйте ctx.payload.hits.hits.<index>.fields.<fieldname>. Например, чтобы получить поле сообщения из первого совпадения, используйте ctx.payload.hits.hits.0.fields.message.

Общее количество совпадений в ответе поиска возвращается как объект в ответе. Он содержит value, количество совпадений и relation, которое указывает, является ли значение точным ("eq") или это нижняя граница общего количества совпадений, соответствующих запросу ("gte"). Вы можете установить track_total_hits в значение true в запросе поиска, чтобы указать Elasticsearch на точное отслеживание количества совпадений.

Атрибуты ввода поиска

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

request.search_type

нет

query_then_fetch

Тип запроса поиска, который требуется выполнить. Допустимые значения: dfs_query_then_fetch и query_then_fetch. По умолчанию в Elasticsearch используется query_then_fetch.

request.indices

нет

-

Индексы для поиска. Если опущено, все индексы ищутся, что является поведением по умолчанию в Elasticsearch.

request.body

нет

-

Тело запроса. Тело запроса следует той же структуре, которую вы обычно отправляете в теле REST-запроса _search. Тело может содержать статический текст или включать mustache шаблоны.

request.template

нет

-

Тело шаблона поиска. Подробнее см. настройка шаблонов.

request.indices_options.expand_wildcards

нет

open

Как расширять подстановки. Допустимые значения: all, open, closed и none. Подробнее см. expand_wildcards.

request.indices_options.ignore_unavailable

нет

true

Игнорировать недоступные индексы при поиске. Подробнее см. ignore_unavailable.

request.indices_options.allow_no_indices

нет

true

Разрешить поиск, где выражение с подстановкой по индексам не приводит к конкретным индексам. Подробнее см. allow_no_indices.

extract

нет

-

Массив JSON-ключей для извлечения из ответа поиска и загрузки в качестве полезной нагрузки. Когда поиск генерирует большой ответ, можно использовать extract для выбора необходимых полей вместо загрузки всего ответа.

timeout

нет

1m

Таймаут ожидания возврата вызова API поиска. Если ответ не возвращается в течение этого времени, ввод поиска завершается ошибкой по таймауту. Это значение переопределяет таймауты по умолчанию для операций поиска.

Вы можете ссылаться на следующие переменные в контексте выполнения при указании запроса body:

Имя Описание

ctx.watch_id

Идентификатор наблюдения, которое выполняется в данный момент.

ctx.execution_time

Время начала выполнения этого наблюдения.

ctx.trigger.triggered_time

Время срабатывания этого наблюдения.

ctx.trigger.scheduled_time

Время, в которое это наблюдение должно было сработать.

ctx.metadata.*

Любые метаданные, связанные с наблюдением.

© 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/8.17/input-search.html

Spec-Zone.ru

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