Watcher 条件上下文
编辑Watcher 条件上下文编辑
使用 Painless 脚本作为 监视条件,以确定是否执行监视或监视中的特定操作。条件脚本返回一个布尔值以指示条件的状态。
以下变量在所有 Watcher 上下文中都可用。
变量
-
params
(Map
,只读) - 作为查询的一部分传入的用户定义参数。
-
ctx['watch_id']
(String
,只读) - 监视的 ID。
-
ctx['id']
(String
,只读) - 服务器为运行监视生成的唯一标识符。
-
ctx['metadata']
(Map
,只读) - 元数据可以添加到监视定义的顶层。这是用户定义的,通常用于合并监视中的重复值。
-
ctx['execution_time']
(ZonedDateTime
,只读) - 监视开始执行的时间。
-
ctx['trigger']['scheduled_time']
(ZonedDateTime
,只读) - 监视的计划触发时间。这是应该执行监视的时间。
-
ctx['trigger']['triggered_time']
(ZonedDateTime
,只读) - 监视的实际触发时间。这是触发监视执行的时间。
-
ctx['payload']
(Map
,只读) - 根据 监视输入 可访问的监视数据。
返回值
-
布尔值
- 如果满足条件,则预期为
true
,否则为false
。
API
可以使用标准的 Painless API。
示例
要运行示例,请先按照 上下文示例 中的步骤操作。
POST _watcher/watch/_execute { "watch" : { "trigger" : { "schedule" : { "interval" : "24h" } }, "input" : { "search" : { "request" : { "indices" : [ "seats" ], "body" : { "query" : { "term": { "sold": "true"} }, "aggs" : { "theatres" : { "terms" : { "field" : "play" }, "aggs" : { "money" : { "sum": { "field" : "cost" } } } } } } } } }, "condition" : { "script" : """ return ctx.payload.aggregations.theatres.buckets.stream() .filter(theatre -> theatre.money.value < 15000 || theatre.money.value > 50000) .count() > 0 """ }, "actions" : { "my_log" : { "logging" : { "text" : "The output of the search was : {{ctx.payload.aggregations.theatres.buckets}}" } } } } }
以下操作条件脚本根据数据集中每个剧目的售票数量来控制 my_log 操作的执行。该脚本汇总每个剧目的总售票数量,如果至少有一个剧目的售票数量超过 10,000 美元,则返回 true。
POST _watcher/watch/_execute { "watch" : { "trigger" : { "schedule" : { "interval" : "24h" } }, "input" : { "search" : { "request" : { "indices" : [ "seats" ], "body" : { "query" : { "term": { "sold": "true"} }, "size": 0, "aggs" : { "theatres" : { "terms" : { "field" : "play" }, "aggs" : { "money" : { "sum": { "field" : "cost", "script": { "source": "doc.cost.value * doc.number.value" } } } } } } } } } }, "actions" : { "my_log" : { "condition": { "script" : """ return ctx.payload.aggregations.theatres.buckets.stream() .anyMatch(theatre -> theatre.money.value > 10000) """ }, "logging" : { "text" : "At least one play has grossed over $10,000: {{ctx.payload.aggregations.theatres.buckets}}" } } } } }
此示例使用的条件与前一个示例几乎相同。以下差异很细微,但值得一提。