ウォッチャー検索入力
ウォッチがトリガーされたときに、search
入力を使用してElasticsearch検索リクエストの結果を実行コンテキストにロードします。サポートされているすべての属性については、検索入力属性を参照してください。
検索入力のrequest
オブジェクトでは、次のことを指定します:
- 検索したいインデックス
- 検索タイプ
- 検索リクエストボディ
検索リクエストボディは、完全なElasticsearch Query DSLをサポートしています。これは、Elasticsearch _search
リクエストのボディと同じです。
たとえば、次の入力は、logs
インデックスからすべてのevent
ドキュメントを取得します:
Js
"input" : {
"search" : {
"request" : {
"indices" : [ "logs" ],
"body" : {
"query" : { "match_all" : {}}
}
}
}
}
インデックスを指定する際に、日付計算やワイルドカードを使用できます。たとえば、次の入力は、今日のデイリークォートインデックスから最新のVIXZクォートをロードします:
Js
{
"input" : {
"search" : {
"request" : {
"indices" : [ "<stock-quotes-{now/d}>" ],
"body" : {
"size" : 1,
"sort" : {
"timestamp" : { "order" : "desc"}
},
"query" : {
"term" : { "symbol" : "vix"}
}
}
}
}
}
}
特定のフィールドの抽出
検索応答の中で、ウォッチペイロードにロードしたいフィールドをextract
属性で指定できます。これは、検索が大きな応答を生成し、特定のフィールドにのみ興味がある場合に便利です。
たとえば、次の入力は、ウォッチペイロードにヒットの総数のみをロードします:
Js
"input": {
"search": {
"request": {
"indices": [ ".watcher-history*" ]
},
"extract": [ "hits.total.value" ]
}
},
テンプレートの使用
#### Js
``````js
{
"input" : {
"search" : {
"request" : {
"indices" : [ "logs" ],
"template" : {
"id" : "my_template",
"params" : {
"value" : 23
}
}
}
}
}
...
}
`
条件の適用
#### Js
``````js
{
"input" : {
"search" : {
"request" : {
"indices" : [ "logs" ],
"body" : {
"query" : { "match_all" : {} }
}
}
}
},
"condition" : {
"compare" : { "ctx.payload.hits.total" : { "gt" : 5 }}
}
...
}
`
検索結果へのアクセス
条件、変換、およびアクションは、ウォッチ実行コンテキストを通じて検索結果にアクセスできます。たとえば:
- すべての検索ヒットをメール本文にロードするには、
ctx.payload.hits
を使用します。 - ヒットの総数を参照するには、
ctx.payload.hits.total
を使用します。 - 特定のヒットにアクセスするには、そのゼロベースの配列インデックスを使用します。たとえば、3番目のヒットを取得するには、
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_fetch
およびquery_then_fetch
です。
Elasticsearchのデフォルトはquery_then_fetch
です。 |
| request.indices
| いいえ | - | 検索するインデックス。省略した場合、すべてのインデックスが検索され、これはElasticsearchのデフォルトの動作です。 |
| request.body
| いいえ | - | リクエストのボディ。リクエストボディは、通常REST _search
リクエストのボディで送信するのと同じ構造に従います。ボディは静的テキストであるか、mustache
テンプレートを含むことができます。 |
| request.template
| いいえ | - | 検索テンプレートのボディ。テンプレートの設定を参照してください。 |
| request.indices_options.expand_wildcards
| いいえ | open
| ワイルドカードを展開する方法。有効な値は:all
、open
、closed
、およびnone
です。
詳細については、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.* |
ウォッチに関連するメタデータ。 |