聚合查询
|ES 的聚合查询和MyQL的聚合查询类型,ES 的聚合查询相比MySQL 要强大的多,ES提供的统计数据方式多种多样。
GET /index/_search
{"aggs":{ "名字(agg)":{ "agg_type":{ "属性":"值" }}}}
例子
- 查询总和
"size":0
只查询聚合结果
GET index/_search
{ "size":0 ,"aggs":{ "sum_field":{ "sum":{"field":"field"} } }}
- 平均数
"size":0
只查询聚合结果
GET index/_search
{ "size":0 ,"aggs":{ "sum_field":{ "avg":{"field":"field"} } }}
- 数量
"size":0
只查询聚合结果
。相当于 MySQL count(distinct)
GET index/_search
{ "size":0 ,"aggs":{ "sum_field":{ "cardinality":{"field":"field"} } }}
- 最大值、最小值
GET index/_search
{ "size":0 ,"aggs":{ "min_field":{ "min":{"field":"value"} }, "max_field":{ "max":{"field":"value"} } }}
- 多个统计
返回 count,min,max,avg,sum 等信息
stats 只支持数值类型
GET index/_search
{ "size":0 ,"aggs":{ "field_info":{ "stats":{"field":"fieldName"} } }}
- 分组统计
GET index/_search
{ "size":0 ,"aggs":{ "dest_country_info":{ "terms":{"field":"fieldName"} } }}
- 嵌套聚合查询
查询不同工种的男女员工数量、然后统计不同工种下男女员工的工资信息
Get index/_search
{
"aggs":{
"job_info":{ "terms":{"field":"job"}},
"aggs":{ "diff_job_gener_no":{"terms":{"field":"gender"}}
"aggs":{"diff_job_gender_sal_info":{"stats":{"field":"sal"}}}
}
}
- top_hits
查询年龄最大的两位员工的信息
GET index/_search
{ "size":0 ,"aggs":{ "older_two_emp":{ "top_hits":{"size":2,"sort":[
{"age":{"order":"desc"}}
]} } }}
- range
查询不同工资区间员工工资的统计信息
GET index/_search
{ "size":0,
"aggs":{
"range_sal_info":{
"range":{
"field":"sal",
"ranges":[ { "from":50,"to":100}, { "from":101,"to":200} ]}
}}
}
- 直方图
Get index/_search
{
"aggs":{
"range_sal_info":{
"histogram":{
"field":"sal",
"interval":5000,
"extended_bounds":{"min":0,"max":1500}}
}
}
- 查询平均工资最低的工种
buckets_path
GET employee/_search
{
"size":0,
"aggs"{"job_info":{ "terms":{"field":"job"}},
"aggs":{ "diff_job_avg_sal":{ "avg":{"field":"sal"}}},
"min_avg_sal_job":{"min_bucket":{"buckets_path":"job_info>diff_job_avg_sal"}}}}
网友评论