一、Elasticsearch的聚合
ES的聚合相当于关系型数据库里面的group by,例如查找在性别字段男女人数的多少并且按照人数的多少进行排序,在使用mysql的时候,可以使用如下的句子
select sex,count(*) from table_name group by sex order by count(*)
在ES里面想要实现这种的语句,就叫做聚合,比如这种的聚合使用DSL语句的话如下所示:
GET /index/type/_search
{
"size" : 0,
"aggs" : {
"agg_sex" : {
"terms" : {
"field" : "sex"
}
}
}
}
这样就可以实现最以上例子中的group by的功能,当然这只是最简单的聚合的使用,在ES里面的聚合有多重多样的,比如说有度量聚合,可以用来计算某一个字段的平均值最大值等,在此给出一个简单的度量聚合的例子
GET /index/type/_search
{
"size" : 0,
"aggs": {
"agg_sex": {
"terms": {
"field": "sex"
},
"agg_age": {
"avg_age": {
"avg": {
"field": "age"
}
}
}
}
}
}
这个DSL语句就是将先按照性别进行聚合,并且对不同的性别给出一个平均的年龄,使用之后ES的给出结果如下所示:
{
...
"aggregations": {
"agg_sex": {
"buckets": [
{
"key": "male",
"doc_count": 4,
"avg_age": {
"value": 25
}
},
{
"key": "female",
"doc_count": 2,
"avg_age": {
"value": 23
}
}
]
}
}
...
}
在度量聚合里面有min,max,sum,avg聚合等,还有stats,extern_stat