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