Watcher 搜索输入

编辑

当触发监视时,使用 search 输入将 Elasticsearch 搜索请求的结果加载到执行上下文中。有关所有支持的属性,请参阅 搜索输入属性

在搜索输入的 request 对象中,您可以指定

搜索请求体支持完整的 Elasticsearch 查询 DSL,它与 Elasticsearch _search 请求的主体相同。

例如,以下输入从 logs 索引检索所有 event 文档

"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 始终准确跟踪命中数。

搜索输入属性

编辑
名称 必需 默认值 描述

request.search_type

query_then_fetch

要执行的搜索请求的类型。有效值为:dfs_query_then_fetchquery_then_fetch。Elasticsearch 默认值为 query_then_fetch

request.indices

-

要搜索的索引。如果省略,则搜索所有索引,这是 Elasticsearch 中的默认行为。

request.body

-

请求的主体。请求主体遵循您通常在 REST _search 请求的主体中发送的相同结构。主体可以是静态文本,也可以包括 mustache 模板

request.template

-

搜索模板的主体。有关更多信息,请参阅配置模板

request.indices_options.expand_wildcards

打开

如何扩展通配符。有效值为:allopenclosednone。有关更多信息,请参阅expand_wildcards

request.indices_options.ignore_unavailable

true

搜索是否应忽略不可用的索引。有关更多信息,请参阅ignore_unavailable

request.indices_options.allow_no_indices

true

是否允许通配符索引表达式导致没有具体索引的搜索。有关更多信息,请参阅allow_no_indices

extract

-

要从搜索响应中提取并作为有效负载加载的 JSON 键的数组。当搜索生成大型响应时,您可以使用 extract 来选择相关字段,而不是加载整个响应。

timeout

1m

等待搜索 API 调用返回的超时时间。如果在此时间内未返回任何响应,则搜索输入超时并失败。此设置会覆盖默认的搜索操作超时。

指定请求 body 时,您可以引用执行上下文中的以下变量

名称 描述

ctx.watch_id

当前正在执行的监视的 ID。

ctx.execution_time

此监视开始执行的时间。

ctx.trigger.triggered_time

触发此监视的时间。

ctx.trigger.scheduled_time

计划触发此监视的时间。

ctx.metadata.*

与监视关联的任何元数据。