ES聚合分析
- 聚合分析是数据库中重要的功能特性,完成对⼀个查询的数据集中数据的聚合计算,如:找出某字段(或计算表达式的结果)的最⼤值、最⼩值,计算和、平均值等。ES作为搜索引擎兼数据库,同样提供了强⼤的聚合分析能⼒。
- 对⼀个数据集求最⼤、最⼩、和、平均值等指标的聚合,在ES中称为指标聚合
- ⽽关系型数据库中除了有聚合函数外,还可以对查询出的数据进⾏分组group by,再在组上进⾏指标聚合。在ES中称为桶聚合
max min sum avg
- 例如 求出⽕箭队球员的平均年龄
POST /nba/_search
{
"query": {
"term": {
"teamNameEn": {
"value": "Rockets"
}
}
},
"aggs": {
"avgAge别名": {
"avg": {
"field": "age"
}
}
},
"size": 0
}
value_count 统计⾮空字段的⽂档数
- 求出⽕箭队中球员打球时间不为空的数量
POST /nba/_search
{
"query": {
"term": {
"teamNameEn": {
"value": "Rockets"
}
}
},
"aggs": {
"countPlayerYear别名": {
"value_count": {
"field": "playYear"
}
}
},
"size": 0
}
Cardinality 值去重计数
- 查出⽕箭队中年龄不同的数量
POST /nba/_search
{
"query": {
"term": {
"teamNameEn": {
"value": "Rockets"
}
}
},
"aggs": {
"counAget别名": {
"cardinality": {
"field": "age"
}
}
},
"size": 0
}
stats 统计count max min avg sum 5个值
- 查出⽕箭队球员的年龄stats
POST /nba/_search
{
"query": {
"term": {
"teamNameEn": {
"value": "Rockets"
}
}
},
"aggs": {
"statsAge别名": {
"stats": {
"field": "age"
}
}
},
"size": 0
}
Extended stats ⽐stats多4个统计结果: 平⽅和、⽅差、标准差、平均值加/减两个标准差的区间
- 查出⽕箭队球员的年龄Extend stats
POST /nba/_search
{
"query": {
"term": {
"teamNameEn": {
"value": "Rockets"
}
}
},
"aggs": {
"extendStatsAge别名": {
"extended_stats": {
"field": "age"
}
}
},
"size": 0
}
Percentiles 占⽐百分位对应的值统计,默认返回[ 1, 5, 25, 50, 75, 95, 99 ]分位上的值
- 查出⽕箭的球员的年龄占⽐
POST /nba/_search
{
"query": {
"term": {
"teamNameEn": {
"value": "Rockets"
}
}
},
"aggs": {
"pecentAge别名": {
"percentiles": {
"field": "age"
}
}
},
"size": 0
}
- 查出⽕箭的球员的年龄占⽐(指定分位值用 percents)
POST /nba/_search
{
"query": {
"term": {
"teamNameEn": {
"value": "Rockets"
}
}
},
"aggs": {
"percentAge别名": {
"percentiles": {
"field": "age",
"percents": [
20,
50,
75
]
}
}
},
"size": 0
}