elasticSearch的数据聚合
一、聚合的种类
0、聚合:
聚合是对文档数据的统计、分析、计算
参与聚合的字段类型必须是:keyword、数值、日期、布尔,不能是分词字段
1、桶(Bucket)聚合:
对文档数据分组,并统计每组数量
1.1 TermAggregation:按照文档字段值分组
1.2 Date Histogram:按照日期阶梯分组,例如一周为一组,或者一月为一组
2、度量(Metric)聚合:
用以计算一些值,比如:最大值、最小值、平均值等
2.1 Avg:求平均值
2.2 Max:求最大值
2.3 Min:求最小值
2.4Stats:同时求max、min、avg、sum等
3、管道(pipeline)聚合:
其它聚合的结果为基础做聚合
4、其他聚合类型
二、DSL实现聚合
1、DSL实现bucket的TermAggregation
GET /_search
{
"aggs": {
"genres": {
"terms": { "field": "genre" }
}
}
}
{
...
"aggregations": {
"genres": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"key": "electronic",
"doc_count": 6
},
{
"key": "rock",
"doc_count": 3
},
{
"key": "jazz",
"doc_count": 2
}
]
}
}
}
2、DSL实现Metric的聚合:
例如,我们要求获取每个品牌的用户评分的min、max、avg等值.
我们可以利用stats聚合:
GET /hotel/_search
{
"size": 0,
"aggs": {
"brandAgg": {
"terms": {
"field": "brand",
"size": 20
},
"aggs": { // 是brands聚合的子聚合,也就是分组后对每组分别计算
"score_stats": { // 聚合名称
"stats": { // 聚合类型,这里stats可以计算min、max、avg等
"field": "score" // 聚合字段,这里是score
}
}
}
}
}
}