searchの中で、別のsearchを実行したい場合、サブサーチ(subsearch)を使います。
便利ですが、サブサーチの件数には上限がありますので、注意が必要です。
使い方
[] カッコ(square bracket)でサーチ分を囲って記載します。
【例】
[sub_search]
利用目的
サブサーチは、主にサブサーチ結果をメインサーチに結合する目的で利用されます。
サブサーチ結果をメインサーチに結合する
結合コマンドの後に、サブサーチを実行することでメインサーチとイベントやフィールドを結合します。以下の3つをよく利用します。
- append
- appendcols
- join
append
appendは、イベント(行)を追加するサーチコマンドです。
コマンドの後ろに[](square bracket)で囲ったサーチ分を記載します。
(makeresultsはイベント(行)を生成するサーチコマンド)
【code】
| makeresults | eval "A field" = "A1" ,"B field" = "B1" | append [makeresults | eval "A field" = "A2","B field" = "B2"] | fields - _time
【結果】
2行目がサブサーチで追加されたイベントです。

appendcols
appendcolsは、サブサーチの結果をフィールド(列)で追加するコマンドです。
【code】
| makeresults | eval "A field" = "A1" ,"B field" = "B1" | appendcols [makeresults | eval "C field" = "C2","D field" = "C2"] | fields - _time
【結果】
「C field」と「D field」がサブサーチで追加されています。

join
メインサーチとサブサーチの結果を指定したフィールドで結合します。
以下の2サーチ結果を「B field」でLeft Joinします。


【code】
| makeresults | eval "A field" = "A1" ,"B field" = "B1" | append [makeresults | eval "A field" = "A2","B field" = "B2"] | join "B field" type=left [makeresults | eval "B field" = "B2","C field" = "C3"] | fields - _time
【結果】
「B field」が同一値のイベントに「C field」が設定されました。

注意事項
冒頭に記載しましたが、サブサーチは件数の上限(10000件)が設定されているため、大量の件数をサーチすると正しい結果が出力されません。
上限は、limit.confを変更することで変更可能なので、必要に応じて変更してください。
まとめ
サブサーチは非常に便利ですが、検索コストも高く上限設定もあるので、できるだけ使わないサーチ文を考えるがsplunk的なのかもしれません。
とはいえ、結局使ってしまうのですが、、、