Spec-Zone.ru › Elasticsearch 7
›Elasticsearch Руководство [7.17] ›Watcher ›Входы Watcher

Вход Watcher для поиска

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

В объекте 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>. Например, чтобы получить поле message из первого совпадения, используйте 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

нет

1м

Таймаут ожидания возврата вызова 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/7.17/input-search.html

Spec-Zone.ru

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