本記事は Elasticsearch 入門記事の第4回「集計・分類 (Aggregations)」です。
その他の Elasticsearch の使い方は以下の記事をご覧ください。
- Elasticsearch とは (概要/できること/検索方法)
- マッピング管理とテンプレート
- Analyzer の設定 (日本語検索、トークナイズ)
- 集計・分類 (Aggregations)
- Dynamic index settings の変更
- データ構造
集計・分類 (Aggregations)
Aggregations には次の2種類が存在します。
以下の "demo_agg" インデックスを利用して、Aggregations の動きを確認します。
POST /_bulk { "index" : { "_index" : "demo_agg", "_id" : "1" } } { "text" : "This is Elasticsearch test.","num":1 } { "index" : { "_index" : "demo_agg", "_id" : "2" } } { "text" : "Elasticsearch is God.","num":2 } { "index" : { "_index" : "demo_agg", "_id" : "3" } } { "text" : "This is a pen.","num":3 } { "index" : { "_index" : "demo_agg", "_id" : "4" } } { "text" : "I have a pen.","num":2 }
集計 (Metrics Aggregations)
Metrics Aggregations は、集計したドキュメントから指定の方法でメトリクスを計算します
メトリクスの指定できる計算方法の例は以下です。
- avg: 平均を取得する
- sum: 合計値を取得する
- max: 最大値を取得する
- min: 最小値を取得する
- stats: 上記全部の値を取得する
- cardinary: 異なる値の数を取得する ※[1,2,3,2]の場合は1,2,3 の3種類
ここでは、Avg Aggregation (平均) を利用してみます。
GET demo_agg/_search { "size": 0, "aggs": { "hoge_name": { "avg": { "field":"num" } } } }
"aggregations" : { "hoge_name" : { "value" : 2.0 } }
"num" フィールドの値は [1, 2, 3, 2] なので、平均の 2.0 を正しく計算できています。
分類 (Buckets Aggregations)
Buckets Aggregations とは、フィールドの値を分類し、各バケットに格納します。
Buckets Aggregations として、次の2種類を紹介します。
Range aggregation
Range aggregation とは、指定した範囲の値を格納するバケットを作成する方法です。
例として、次の2つのバケットを作成します。
- num フォールドの値が [0 ~ 2] のドキュメントを格納するバケット
- num フォールドの値が [2 以上] のドキュメントを格納するバケット
GET demo_agg/_search { "size": 0, "aggs": { "bucket_name": { "range": { "field":"num", "ranges": [ { "from": 0, "to":2 }, { "from": 2 } ] } } } }
"aggregations" : { "bucket_name" : { "buckets" : [ { "key" : "0.0-2.0", "from" : 0.0, "to" : 2.0, "doc_count" : 1 }, { "key" : "2.0-*", "from" : 2.0, "doc_count" : 3 } ] }
次の結果が確認できます。
- num フォールドの値が [0 ~ 2] を格納するバケット: 1つのドキュメント (num = [1])
- num フォールドの値が [2 以上] を格納するバケット: 3つのドキュメント (num = [2, 3, 2])
Histogram aggregation
Histogram aggregation とは、等間隔でバケットを作成する方法です。

"num" フィールドを、1間隔でバケットを作成した例は、以下のとおりです。
GET demo_agg/_search { "size": 0, "aggs": { "bucket_name": { "histogram": { "field":"num", "interval": 1 } } } }
"aggregations" : { "bucket_name" : { "buckets" : [ { "key" : 1.0, "doc_count" : 1 }, { "key" : 2.0, "doc_count" : 2 }, { "key" : 3.0, "doc_count" : 1 } ]
num の値が1ごとにバケットが作成されていることがわかります。
関連情報
関連記事
- Elasticsearch とは (概要/できること/検索方法)
- マッピング管理とテンプレート
- Analyzer の設定 (日本語検索、トークナイズ)
- 集計・分類 (Aggregations)
- Dynamic index settings の変更
- データ構造