Ввод данных поиска 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 на точное отслеживание количества совпадений.
Атрибуты ввода поиска
| Имя | Требуется | По умолчанию | Описание |
|---|---|---|---|
| нет |
| Тип запроса поиска, который требуется выполнить. Допустимые значения: |
| нет | - | Индексы для поиска. Если опущено, все индексы ищутся, что является поведением по умолчанию в Elasticsearch. |
| нет | - | Тело запроса. Тело запроса следует той же структуре, которую вы обычно отправляете в теле REST-запроса |
| нет | - | Тело шаблона поиска. Подробнее см. настройка шаблонов. |
| нет |
| Как расширять подстановки. Допустимые значения: |
| нет |
| Игнорировать недоступные индексы при поиске. Подробнее см. |
| нет |
| Разрешить поиск, где выражение с подстановкой по индексам не приводит к конкретным индексам. Подробнее см. allow_no_indices. |
| нет | - | Массив JSON-ключей для извлечения из ответа поиска и загрузки в качестве полезной нагрузки. Когда поиск генерирует большой ответ, можно использовать |
| нет | 1m | Таймаут ожидания возврата вызова API поиска. Если ответ не возвращается в течение этого времени, ввод поиска завершается ошибкой по таймауту. Это значение переопределяет таймауты по умолчанию для операций поиска. |
Вы можете ссылаться на следующие переменные в контексте выполнения при указании запроса body:
| Имя | Описание |
|---|---|
| Идентификатор наблюдения, которое выполняется в данный момент. |
| Время начала выполнения этого наблюдения. |
| Время срабатывания этого наблюдения. |
| Время, в которое это наблюдение должно было сработать. |
| Любые метаданные, связанные с наблюдением. |
© 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