ゴール
本記事ではElasticsearchで頻繁に使用されるAggregationの概要を理解してもらうことが目的となります。
CRUDやSearchと少し異なり新しい概念のため、まずは概要から説明していこうと思います。
- CRUD
- Search
- query
- aggregation
- 概要
- Metrics
- Buckets
Elasticsearch
Elasticsearch は オープンソースの全文検索エンジンです。
Apache LuceneをベースとしたJavaで書かれたソフトウェアでElastic社により開発が進められています。
登録したドキュメントから目的の単語を含むドキュメントを高速に検索することができます。
基本的にElasticsearchではRestful APIを使って操作します。
Aggregationとは
Aggregationとは、検索の結果に対して分類や集計を行うことができる機能です。
通常の検索では、ユーザがあらかじめ指定したクエリに基づいてヒットしたドキュメントを結果として返します。
一方でAggregationでは、ドキュメントを特定のグループに分類したり、分類したグループごとの最大値や最小値、平均値などの統計量の値を返すことができます。
Elasticsearchと頻繁に用いられるKibanaではデータの可視化を行うことができます。
その際の裏側ではElasticsearchにクエリが投げられているのですが、
このようなAggregationのクエリが頻繁に投げられ、分類・集計が行われています。
Aggregationの構成
Aggregationでは分類や集計を行うための多くのタイプがあります。
これらをカテゴリ分けするといくつかのカテゴリに分かれますが、
Kibanaとの連携も含め重要なものを3つ挙げると以下の3つとなります。
- Metrics
- Buckets
- Pipeline
それぞれを説明すると以下のようになります。
Metrics
分類されたグループに対して、最小、最大、平均などの統計値を計算します。
Buckets
ドキュメントをフィールド値に基づきグループ化するための分類方法です。
ブログ記事のカテゴリフィールドに基づく分類を行う。といった場合などに使用します。
他にもいいね数でヒストグラムで分けるといったような分類方法などもあります。
BucketsとMetricsを図で示すと以下のような分かれ方となります。
Pipeline
PipelineはBucketsなどの他のAggregationの結果を用いてさらに集計する機能となります。
Kibanaでの可視化で移動平均や前日との差分を取りたいといった用途で使うことが多いです。
MetricsとBuckets
ElasticsearchやKibanaを勉強する際は基本的にはMetricsとBucketsの概念を抑えておけば問題ありません。
よくあるやり方としてドキュメントをBucketsをグループに分割してグループごとの統計値を計算するという用途です。(もちろん個別に使うこともできます。)
以下は「ブログ記事をカテゴリごとに分類し、平均購読数を集計する」といった例になります。
以上がAggregationの基本的な概要となります。
次回から実際にAggregationの中身について解説していきます。
よろしくお願いします。