elasticserchのAggregationについてまとめてみる

2月 12, 2022

どもども、最近気になっているブランドはビリオネアボーイズクラブです。saisaiです。


本日はまとまたElasticSerchについての記事です。過去に2本ほどあげているので、そちらもよろしければ是非…!

elasticserchの基本要素についてざっくりまとめてみる

elasticserchのAnalyzerについてまとめてみる


本日はElasticSerchの重要機能であるAggregationについて記事にして基礎を理解したいと思います。

Aggregationとは

Aggrigationとは検索結果を分類、集計することができる機能です。件数や最大値、最小値、平均値を求めることも可能です。クエリ、フィルタ処理と同時に使用できます。

Aggrigationを使用する際は、search apiに"aggs"キーを指定します。(実際の使用方法は後述)

構成要素は
・Metrics(最小、最大、平均などを算出)
・Buckets(フィールドに基づいてグループ化)
・Pipeline(上記結果をさらに集計、今月の合計から先月の差分などを求めることができる)
・Matrix(相関や共分散をとる。試験的機能)
です。

本日は上記のうちMetrics、Buckets、Pipelineについてさらに詳しく見ていきたいと思います。

Metrics

Metricsは最小、最大、平均などを算出することができます。


実際のapiの叩き方は以下のとおりです。

{
  "aggs": {
    "num_avarage": {
      "avg": {
        "field": "num"
      }
    }
  }

numフィールドの平均値を求めます。"aggs"キーを指定していることが分かりますね。

他にもmax(最大),min(最小),sum(合計),cardinality(種類),stats(複数),value_count(フィールドの個数)など指定することも可能です。

Buckets

ではMetricsでの算出結果にさらにソートをかけてみましょう。ここで使用するのがBucketsです。


例えばフィールドがもつ一意な値ごとにドキュメントを分類したい場合は以下のようにします。

{
  "size":0,
  "aggs":{
    "group_by_terms":{
      "terms": {
        "field": "num",
        "size": 5
      },"aggs": {
    "num_avarage": {
      "avg": {
        "field": "num"
        }
      }
    }
  }
}

これで各フィールドそれぞれの集計結果が一意な値ごとに分類されて算出されます。


Bucketは他にもrange(値の範囲),histgram(一定間隔),filter(フィルタリング),significant(突出しているもの)などが使用可能です。

Pipeline

他の2機能と比べると比較的新しい機能です。一言で表すことは難しいのですが、Aggrigation結果をさらに集計する機能とまずは大雑把に説明しておきます。


大きな機能としては

Sibling Pipeline Aggregations(Aggregationの結果に対してReduce処理)
・Parent Pipeline Aggregations(Aggregationの結果に対して、バケット間で Map処理)

の二つがあります。

例を新たに作成して説明することが難しかったのですが下記サイトが非常に分かりやすく解説していたので是非こちらを参照ください!

https://suzuki.tdiary.net/20150729.html

まとめ

以上が、非常にざっくりとしたElasticSerchにおけるAggrigation機能の紹介でした。


検索結果を集計する場面は非常に多くあると思いますので、是非ともマスターしておきたい機能です。


また使いこなせるようになった暁にはさらに詳しい記事を書いていきたいです。


最後まで読んでいただきありがとうございした!


↓オススメ教材

ElasticSerch

Posted by CY