聚合(aggregations)可以实现对文档数据的统计、分析、运算。聚合常见的有三类:

1、桶(Bucket)聚合:用来对文档做分组
TermAggregation:按照文档字段值分组
Date Histogram:按照日期阶梯分组,例如一周为一组,或者一月为一组
2、度量(Metric)聚合:用以计算一些值,比如:最大值、最小值、平均值等
Avg:求平均值
Max:求最大值
Min:求最小值
Stats:同时求maxminavgsum
3、管道(pipeline)聚合:其它聚合的结果为基础做聚合

其中,我们以学习桶(Bucket)聚合和度量(Metric)聚合为主。需要注意的是:参与聚合的字段类型必须是:keyword、数值、日期、布尔

示例一(桶Bucket聚合功能):统计所有数据中的酒店品牌有几种,此时可以根据酒店品牌的名称做聚合,并且要限定聚会范围(注意aggs与query同级),价格小于200的酒店,自定义排序,按照每组查询到的总数进行升序排序。(聚合可配置的有:size:指定聚合结果的数量,order:指定聚合结果的排序方式,field:指定聚合字段)

GET /hotel/_search
{
  "query": {
    "range": {
      "price": {
        "lte": 200
      }
    }
  }, 
  "size": 0,
  "aggs": {
    "brandAgg": {
      "terms": {
        "field": "brand",
        "size": 20,
        "order": {
          "_count": "asc"
        }
      }
    }
  }
}

 示例二(度量metric嵌套聚合功能):统计所有数据的酒店品牌有多少种,并且算出每种酒店评分的最小值、最大值、平均值、总值,最后以每个酒店的平均评分作降序排序(里面的aggs就是嵌套了一个聚合,stats就是求上面聚合得到的结果进行求最小值、最大值、平均值、总值,order里的scoreAgg.avg就是设置酒店平均分的排序方式

GET /hotel/_search
{
  "size": 0,
  "aggs": {
    "brandAgg": {
      "terms": {
        "field": "brand",
        "size": 20,
        "order": {
          "scoreAgg.avg": "desc"
        }
      },
      "aggs": {
        "scoreAgg": {
          "stats": {
            "field": "score"
          }
        }
      }
    }
  }
}

至此,ElasticSearch的聚合介绍和实例展示就到此结束啦~

GitHub 加速计划 / de / devtools
55
5
下载
vuejs/devtools: Vue.js 开发者工具,这是一个浏览器插件,可以安装在 Chrome 和 Firefox 等现代浏览器中,用于调试 Vue 应用程序,提供了组件树查看、状态快照、时间旅行等高级调试功能。
最近提交(Master分支:25 天前 )
79116147 - 1 年前
f0359002 - 1 年前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐