ElasticSearch 7.x 聚合查询

聚合查询

|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"}}}}

你可能感兴趣的:(ElasticSearch 7.x 聚合查询)