elasticsearch聚合查询之三种聚合类型

聚合查询分三类:桶聚合、指标聚合、管道聚合。

1:桶聚合:通俗的讲就是按某个属性分类,统计该属性数量

GET how2java/product/_search //查询每个地方商品数量
{
  "size": 0, 
  "aggs": {
    "place_agg": {
      "terms": {
        "field": "place.keyword",  //按地域分类,
        "size": 100//默认只查询数据量最大的前10条数据
      }
    }
  }
}

结果:

 

 

 

2:指标聚合:常用的就是查询平均值、最大最小值、总数、去重总数、求和

GET how2java/product/_search
{
  "size": 0,
  "aggs": {
    "max_agg": {
      "max": {
        "field": "price"
      }
    },
    "min_agg": {
      "min": {
        "field": "price"
      }
    },
    "avg_agg": {
      "avg": {
        "field": "price"
      }
    },
    "count_agg": {
      "value_count": {
        "field": "price"
      }
    },
    "cardinality_agg": {
      "cardinality": {
        "field": "place.keyword"
      }
    }
  }
}

 

前两种比较好理解

3、管道聚合,又叫二次聚合,用于一些复杂的查询

GET how2java/_search   //求商品平均价格最低和最高的地域和其平均价格
{
  "size": 0,
  "aggs": {
    "place_bucket": {   //第一步
      "terms": { //先按地域分桶
        "field": "place.keyword",
        "size": 100
      },
      "aggs": {  // 第二次聚合,基于聚合结果的聚合 在地域桶的同级求每个地域商品的平均价格
        "avg_price": {
          "avg": {
            "field": "price"
          }
        }
      }
    },
    "min_place": { //第二步使用pipeline
      "min_bucket": {//求平均价格最低的桶
        "buckets_path": "place_bucket>avg_price"
      }
    },
    "max_place": {
      "max_bucket": {//求平均价格最高的桶
        "buckets_path": "place_bucket>avg_price"
      }
    }
  }
}

.......管道聚合待深入学习

posted @ 2022-10-11 23:15  曹伟666  阅读(357)  评论(0编辑  收藏  举报