ウォッチャー検索入力

ウォッチがトリガーされたときに、search入力を使用してElasticsearch検索リクエストの結果を実行コンテキストにロードします。サポートされているすべての属性については、検索入力属性を参照してください。

検索入力のrequestオブジェクトでは、次のことを指定します:

  • 検索したいインデックス
  • 検索タイプ
  • 検索リクエストボディ

検索リクエストボディは、完全なElasticsearch Query DSLをサポートしています。これは、Elasticsearch _searchリクエストのボディと同じです。

たとえば、次の入力は、logsインデックスからすべてのeventドキュメントを取得します:

Js

  1. "input" : {
  2. "search" : {
  3. "request" : {
  4. "indices" : [ "logs" ],
  5. "body" : {
  6. "query" : { "match_all" : {}}
  7. }
  8. }
  9. }
  10. }

インデックスを指定する際に、日付計算やワイルドカードを使用できます。たとえば、次の入力は、今日のデイリークォートインデックスから最新のVIXZクォートをロードします:

Js

  1. {
  2. "input" : {
  3. "search" : {
  4. "request" : {
  5. "indices" : [ "<stock-quotes-{now/d}>" ],
  6. "body" : {
  7. "size" : 1,
  8. "sort" : {
  9. "timestamp" : { "order" : "desc"}
  10. },
  11. "query" : {
  12. "term" : { "symbol" : "vix"}
  13. }
  14. }
  15. }
  16. }
  17. }
  18. }

特定のフィールドの抽出

検索応答の中で、ウォッチペイロードにロードしたいフィールドをextract属性で指定できます。これは、検索が大きな応答を生成し、特定のフィールドにのみ興味がある場合に便利です。

たとえば、次の入力は、ウォッチペイロードにヒットの総数のみをロードします:

Js

  1. "input": {
  2. "search": {
  3. "request": {
  4. "indices": [ ".watcher-history*" ]
  5. },
  6. "extract": [ "hits.total.value" ]
  7. }
  8. },

テンプレートの使用

  1. #### Js
  2. ``````js
  3. {
  4. "input" : {
  5. "search" : {
  6. "request" : {
  7. "indices" : [ "logs" ],
  8. "template" : {
  9. "id" : "my_template",
  10. "params" : {
  11. "value" : 23
  12. }
  13. }
  14. }
  15. }
  16. }
  17. ...
  18. }
  19. `

条件の適用

  1. #### Js
  2. ``````js
  3. {
  4. "input" : {
  5. "search" : {
  6. "request" : {
  7. "indices" : [ "logs" ],
  8. "body" : {
  9. "query" : { "match_all" : {} }
  10. }
  11. }
  12. }
  13. },
  14. "condition" : {
  15. "compare" : { "ctx.payload.hits.total" : { "gt" : 5 }}
  16. }
  17. ...
  18. }
  19. `

検索結果へのアクセス

条件、変換、およびアクションは、ウォッチ実行コンテキストを通じて検索結果にアクセスできます。たとえば:

  • すべての検索ヒットをメール本文にロードするには、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 | ワイルドカードを展開する方法。有効な値は:allopenclosed、および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.* ウォッチに関連するメタデータ。