Elasticsearchスーパー重合関数(四)bucketsの入れ子使用

11942 ワード

Elasticsearchスーパー重合関数(四)bucketsの入れ子使用
作者:ydw
場所:武漢
email:[email protected]
  • Elasticsearchスーパー重合関数(四)bucketsの入れ子使用
  • 例:四半期ごとに全自動車ブランドの総売上高を展示するために重合を構築する.同時に四半期ごとに、自動車ブランドごとに販売総額を計算して、どのブランドが一番儲かるかを探し出すことができます.
  • httpコード
  • java-ap
  • リターン結果
  • 元のデータはやはり第一編のデータを引用します.ElasticSearchの非常に強い集約クエリ(一)
    実例:統合を構築し、四半期ごとに全自動車ブランドの総売上高を展示する.同時に四半期ごとに、自動車ブランドごとに販売総額を計算して、どのブランドが一番儲かるかを探し出すことができます.
    httpコード
    GET /cars/transactions/_search
    {
       "size" : 0,
       "aggs": {
          "sales": {
             "date_histogram": {
                "field": "sold",
                "interval": "quarter", 
                "format": "yyyy-MM-dd",
                "min_doc_count" : 0,
                "extended_bounds" : {
                    "min" : "2014-01-01",
                    "max" : "2014-12-31"
                }
             },
             "aggs": {
                "per_make_sum": {
                   "terms": {
                      "field": "make"
                   },
                   "aggs": {
                      "sum_price": {
                         "sum": { "field": "price" } 
                      }
                   }
                },
                "total_sum": {
                   "sum": { "field": "price" } 
                }
             }
          }
       }
    }
    java-api
    
        @Test
        public void bucketsInsideBuckets(){
            SearchResponse response = transportClient.prepareSearch("cars")
                    .setTypes("transactions")
                    .addAggregation(
                            AggregationBuilders.dateHistogram("sales")
                                    .field("sold")
                                    .dateHistogramInterval(DateHistogramInterval.QUARTER)
                                    .format("yyyy-MM-dd")
                                    .minDocCount(0l)
                                    .extendedBounds(
                                            new ExtendedBounds("2014-01-01","2014-12-31")
                                    ).subAggregation(
                                            //      ,             
                                            AggregationBuilders.sum("total_sum")
                                                    .field("price")
                            )
                                    //         ,      ,         
                            .subAggregation(
                                    AggregationBuilders.terms("per_make_sum")
                                        .field("make")
                                        .subAggregation(
                                                //                
                                                AggregationBuilders.sum("sum_price")
                                                    .field("price")
                                        )
    
                            )
                    )
                    .setSize(0)
                    .get();
            Aggregation sales = response.getAggregations().get("sales");
            System.out.println(sales);
    
    結果を返します
    {
      "took": 1,
      "timed_out": false,
      "_shards": {
        "total": 5,
        "successful": 5,
        "skipped": 0,
        "failed": 0
      },
      "hits": {
        "total": 7,
        "max_score": 0.0,
        "hits": []
      },
      "aggregations": {
        "sales": {
          "buckets": [
            {
              "key_as_string": "2014-01-01",//     
              "key": 1388534400000,
              "doc_count": 1,
              "per_make_sum": {
                "doc_count_error_upper_bound": 0,
                "sum_other_doc_count": 0,
                "buckets": [
                  {
                    "key": "bmw",
                    "doc_count": 1,
                    "sum_price": {//         
                      "value": 80000.0
                    }
                  }
                ]
              },
              "total_sum": {//        
                "value": 80000.0
              }
            },
            {
              "key_as_string": "2014-04-01",
              "key": 1396310400000,
              "doc_count": 1,
              "per_make_sum": {
                "doc_count_error_upper_bound": 0,
                "sum_other_doc_count": 0,
                "buckets": [
                  {
                    "key": "ford",
                    "doc_count": 1,
                    "sum_price": {
                      "value": 30000.0
                    }
                  }
                ]
              },
              "total_sum": {
                "value": 30000.0
              }
            },
            {
              "key_as_string": "2014-07-01",
              "key": 1404172800000,
              "doc_count": 2,
              "per_make_sum": {
                "doc_count_error_upper_bound": 0,
                "sum_other_doc_count": 0,
                "buckets": [
                  {
                    "key": "toyota",
                    "doc_count": 2,
                    "sum_price": {
                      "value": 27000.0
                    }
                  }
                ]
              },
              "total_sum": {
                "value": 27000.0
              }
            },
            {
              "key_as_string": "2014-10-01",
              "key": 1412121600000,
              "doc_count": 3,
              "per_make_sum": {
                "doc_count_error_upper_bound": 0,
                "sum_other_doc_count": 0,
                "buckets": [
                  {
                    "key": "honda",
                    "doc_count": 3,
                    "sum_price": {
                      "value": 50000.0
                    }
                  }
                ]
              },
              "total_sum": {
                "value": 50000.0
              }
            }
          ]
        }
      }
    }