
聚合就是对分散的数据进行统计、分析、运算,es提供了一些列的聚合操作API,聚合的字段不能被分词
elasticsearch使用桶聚合对文档进行分组,类似SQL中的group by
该示例需要删除注释才能运行
GET bank\_search
{
  "size":0, // 文档的数据条数,设置为0表示不显示文档,只显示聚合结果
  "aggs":{ // 定义聚合
    "ageAggs":{ // 聚合的名称
      "terms":{ // 聚合的类型,我们按字段分组所以选择了terms
        "field":"age",// 用于分组的字段
        "size":1 // 聚合结果的条数,设置为1表示只显示一条聚合结果,不设置则显示所有
      }
    }
  }
}
运行结果如下,这里"age"字段的值就是buckets中的key,doc_count就是每个分组的数量

通过order设置排序规则
按照分组关键字进行排序

按照分组数量排序

通过添加query条件即可
如下,支队地址包含mill的数据进行聚合操作

elasticsearch通过指标聚合来计算数据的平均值、最小值等信息
GET bank\account\_search
{
  "size":0,
  "aggs":{ // 聚合操作
    "ageStats":{ // 聚合名称
      "stats":{ // 聚合类型,stats会自动计算min、max、avg、sum,如果只计算一个,则将stats换成对应的类型即可
        "field":"age"// 聚合的字段
      }
    }
  }
}
如下计算了年龄和存款的最大值、最小值、平均值、求和

管道聚合其实就是再聚合结果的基础上在做聚合
聚合嵌套的语法规则很简单,再aggs下,可以再添加aggs,不在赘述,可以直接参考示例
如下查询中,使用桶聚合按照年龄进行了分组,然后再每个年龄分组中,再统计每个年龄的男性和女性数量,并统计男性和女性的平均存款
