Watcher search payload transform
A payload transform that executes a search on the cluster and replaces the current payload in the watch execution context with the returned search response. The following snippet shows how a simple search transform can be defined on the watch level:
{
"transform" : {
"search" : {
"request" : {
"body" : { "query" : { "match_all" : {} }}
}
}
}
} Like every other search based construct, one can make use of the full search API supported by Elasticsearch. For example, the following search payload transform execute a search over all events indices, matching events with error priority:
{
"transform" : {
"search" : {
"request" : {
"indices" : [ "events-*" ],
"body" : {
"size" : 0,
"query" : {
"match" : { "priority" : "error"}
}
}
}
}
}
} The following table lists all available settings for the search payload transform:
Table 83. Search payload transform settings
| Name | Required | Default | Description |
|---|---|---|---|
| no | query_then_fetch | The search type. |
| no | all indices | One or more indices to search on. |
| no |
| The body of the request. The request body follows the same structure you normally send in the body of a REST |
| no |
| Determines how to expand indices wildcards. An array consisting of a combination of |
| no |
| A boolean value that determines whether the search should leniently ignore unavailable indices (see multi-target syntax) |
| no |
| A boolean value that determines whether the search should leniently return no results when no indices are resolved (see multi-target syntax) |
| no | - | The body of the search template. See configure templates for more information. |
| no | 30s | The timeout for waiting for the search api call to return. If no response is returned within this time, the search payload transform times out and fails. This setting overrides the default timeouts. |
Template support
The search payload transform support mustache templates. This can either be as part of the body definition or alternatively point to an existing template (either defined in a file or stored as a script in Elasticsearch).
For example, the following snippet shows a search that refers to the scheduled time of the watch:
{
"transform" : {
"search" : {
"request" : {
"indices" : [ "logstash-*" ],
"body" : {
"size" : 0,
"query" : {
"bool" : {
"must" : {
"match" : { "priority" : "error"}
},
"filter" : [
{
"range" : {
"@timestamp" : {
"from" : "{{ctx.trigger.scheduled_time}}||-30s",
"to" : "{{ctx.trigger.triggered_time}}"
}
}
}
]
}
}
}
}
}
}
} The model of the template is a union between the provided template.params settings and the standard watch execution context model.
The following is an example of using templates that refer to provided parameters:
{
"transform" : {
"search" : {
"request" : {
"indices" : [ "logstash-*" ],
"template" : {
"source" : {
"size" : 0,
"query" : {
"bool" : {
"must" : {
"match" : { "priority" : "{{priority}}"}
},
"filter" : [
{
"range" : {
"@timestamp" : {
"from" : "{{ctx.trigger.scheduled_time}}||-30s",
"to" : "{{ctx.trigger.triggered_time}}"
}
}
}
]
}
},
"params" : {
"priority" : "error"
}
}
}
}
}
}
}
© 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/transform-search.html