English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Elasticsearch 聚合

アグリゲーションフレームワークは、検索クエリが選択するすべてのデータを収集し、多くの構成要素で構成されており、データの複雑な要約を構築するのに役立ちます。アグリゲーションの基本的な構造は以下の通りです-

"aggregations" : {
   "" : {
      "" : {
      }
 
      [["meta" : { [] } ]?
      [["aggregations" : { []+ }
   }
   ["" : { ... } ]?*
}

アグリゲーションには異なるタイプがあり、それぞれが独自の目的を持っています。この章では、これらの問題について詳細に説明します。

指標アグリゲーション

これらのアグリゲーションは、アグリゲーションドキュメントのフィールド値に基づいてマトリックスを計算するのに役立ち、時にはスクリプトからいくつかの値を生成することもできます。

数値マトリックスは、単値(例えば、平均アグリゲーション)または複数値(例えば、統計データ)でできます。

平均アグリゲーション

このアグリゲーションは、アグリゲーションドキュメントに存在する任何の数値フィールドの平均値を取得するために使用されます。例えば、

POST /schools/_search
{
   "aggs":{
      "avg_fees":{"avg":{"field":"fees"}}
   }
}

上記のコードを実行すると、以下の結果が得られます-

{
   "took": 41,
   "timed_out": false
   "_shards" : {}}
      "total" : 1,
      "successful" : 1,
      "skipped" : 0,
      "failed" : 0
   }
   "hits" : {
      "total" : {
         "value" : 2,
         "relation" : "eq"
      }
      "max_score": 1.0,
      "hits": [
         {
            "_index": "schools",
            "_type": "school",
            "_id": ""5",
            "_score": 1.0,
            "_source": {
               "name": "Central School",
               "description": "CBSE Affiliation",
               "street": "Nagan",
               "city": "paprola",
               "state": "HP",
               "zip": ""176115",
               "location": [
                  31.8955385,
                  76.8380405
               ],
            "fees": 2200,
            "tags": [
               "Senior Secondary",
               "beautiful campus"
            ],
            "rating": ""3.3"
         }
      }
      {
         "_index": "schools",
         "_type": "school",
         "_id": ""4",
         "_score": 1.0,
         "_source": {
            "name": "City Best School",
            "description": "ICSE",
            "street": "West End",
            "city": "Meerut",
            "state": "UP",
            "zip": ""250002",
            "location": [
               28.9926174,
               77.692485
            ],
            "fees": 3500,
            "tags": [
               "fully computerized"
            ],
            "rating": ""4.5"
         }
      }
   }
 }
   "aggregations" : {
      "avg_fees": {
         "value" : 2850.0
      }
   }
}

基数アグリゲーション

このアグリゲーションは特定のフィールドの異なる値のカウントを提供します。

POST /schools/_search?size=0
{
   "aggs":{
      "distinct_name_count":{"cardinality":{"field":"fees"}}
   }
}

上記のコードを実行すると、以下の結果が得られます-

{
   "took": 2,
   "timed_out": false
   "_shards" : {}}
      "total" : 1,
      "successful" : 1,
      "skipped" : 0,
      "failed" : 0
   }
   "hits" : {
      "total" : {
         "value" : 2,
         "relation" : "eq"
      }
      "max_score" : null,
      "hits" : [ ]
   }
   "aggregations" : {
      "distinct_name_count": {
         "value" : 2
      }
   }
}

Note −基数の値は2、なぜなら費用には二つの異なる値があるからです。

拡張統計データ集約

この集約は、集約ドキュメント内の特定の数値フィールドに関するすべての統計情報を生成します。

POST /schools/_search?size=0
{
   "aggs": {
      "fees_stats": { "extended_stats": { "field": "fees" } }
   }
}

上記のコードを実行すると、以下の結果が得られます-

{
   "took": 8,
   "timed_out": false
   "_shards" : {}}
      "total" : 1,
      "successful" : 1,
      "skipped" : 0,
      "failed" : 0
   }
   "hits" : {
      "total" : {
         "value" : 2,
         "relation" : "eq"
      }
      "max_score" : null,
      "hits" : [ ]
   }
   "aggregations" : {
      "fees_stats": {
         "count": 2,
         "min": 2200.0,
         "max": 3500.0,
         "avg": 2850.0,
         "sum": 5700.0,
         "sum_of_squares": 1.709E7,
         "variance": 422500.0,
         "std_deviation": 650.0,
         "std_deviation_bounds": {
            "upper": 4150.0,
            "lower": 1550.0
         }
      }
   }
}

最大集約

この集約は、集約ドキュメント内の特定の数字フィールドの最大値を検索します。

POST /schools/_search?size=0
{
   "aggs": {
   "max_fees": { "max": { "field": "fees" } }
   }
}

上記のコードを実行すると、以下の結果が得られます-

{
   "took": 16,
   "timed_out": false
   "_shards" : {}}
      "total" : 1,
      "successful" : 1,
      "skipped" : 0,
      "failed" : 0
   }
  "hits" : {
      "total" : {
         "value" : 2,
         "relation" : "eq"
      }
      "max_score" : null,
      "hits" : [ ]
   }
   "aggregations" : {
      "max_fees": {
         "value" : 3500.0
      }
   }
}

最小集約

この集約は、集約ドキュメント内の特定の数字フィールドの最小値を検索します。

POST /schools/_search?size=0
{
   "aggs": {
      "min_fees": { "min": { "field": "fees" } }
   }
}

上記のコードを実行すると、以下の結果が得られます-

{
   "took": 2,
   "timed_out": false
   "_shards" : {}}
      "total" : 1,
      "successful" : 1,
      "skipped" : 0,
      "failed" : 0
   }
   "hits" : {
      "total" : {
         "value" : 2,
         "relation" : "eq"
      }
      "max_score" : null,
      "hits" : [ ]
   }
  "aggregations" : {
      "min_fees" : {
         "value" : 2200.0
      }
   }
}

集約合計

この集約は、集約ドキュメント内の特定の数値フィールドの合計を計算します。

POST /schools/_search?size=0
{
   "aggs": {
      "total_fees": { "sum": { "field": "fees" } }
   }
}

上記のコードを実行すると、以下の結果が得られます-

{
   "took": 8,
   "timed_out": false
   "_shards" : {}}
      "total" : 1,
      "successful" : 1,
      "skipped" : 0,
      "failed" : 0
   }
   "hits" : {
      "total" : {
         "value" : 2,
         "relation" : "eq"
      }
      "max_score" : null,
      "hits" : [ ]
   }
   "aggregations" : {
      "total_fees": {
         "value" : 5700.0
      }
   }
}

特定の状況では、地理境界集約や地理質心集約などの他の度量標準集約もあります。これにより、地理的位置情報を実現できます。

統計集約

多値度衡量標準の集約で、集約ドキュメントから抽出された数値に基づいて統計情報を計算できます。

POST /schools/_search?size=0
{
   "aggs": {
      "grades_stats": { "stats": { "field": "fees" } }
   }
}

上記のコードを実行すると、以下の結果が得られます-

{
   "took": 2,
   "timed_out": false
   "_shards" : {}}
      "total" : 1,
      "successful" : 1,
      "skipped" : 0,
      "failed" : 0
   }
   "hits" : {
      "total" : {
         "value" : 2,
         "relation" : "eq"
      }
      "max_score" : null,
      "hits" : [ ]
   }
   "aggregations" : {
      "grades_stats": {
         "count": 2,
         "min": 2200.0,
         "max": 3500.0,
         "avg": 2850.0,
         "sum": 5700.0
      }
   }
}

集約メタデータ

メタデータマークを使用して、リクエスト時に一部の集約に関するデータを追加し、レスポンスとして取得できます。

POST /schools/_search?size=0
{
   "aggs": {
      "min_fees": { "avg": { "field": "fees" } }
         "meta": {
            "dsc": "Lowest Fees This Year"
         }
      }
   }
}

上記のコードを実行すると、以下の結果が得られます-

{
   "took": 0
   "timed_out": false
   "_shards" : {}}
      "total" : 1,
      "successful" : 1,
      "skipped" : 0,
      "failed" : 0
   }
   "hits" : {
      "total" : {
         "value" : 2,
         "relation" : "eq"
      }
      "max_score" : null,
      "hits" : [ ]
   }
   "aggregations" : {
      "min_fees" : {
         "meta" : {
            "dsc" : "今年最低料金"
         }
         "value" : 2850.0
      }
   }
}