笔记四十:聚合的作用范围及排序
聚合的作用范围
ES 聚合分析的默认作用范围是query的查询结果集
同时 ES 还支持以下方式改变聚合的作用范围
Filter
Post_Filter
Global
# Query POST employees/_search { "size": 0, "query": { "range": { "age": { "gte": 20 } } }, "aggs": { "jobs": { "terms": { "field":"job.keyword" } } } }
Filter
#Filter
POST employees/_search
{
"size": 0,
"aggs": {
"older_person": {
"filter":{
"range":{
"age":{
"from":35
}
}
},
"aggs":{
"jobs":{
"terms": {
"field":"job.keyword"
}
}
}},
"all_jobs": {
"terms": {
"field":"job.keyword"
}
}
}
}
Post_Filter
- 是对聚合分析后的文档进行再次过滤
- Size 无需设置为0
- 使用场景
- 一条语句,获取聚合信息 + 获取符合条件的文档
#Post field. 一条语句,找出所有的job类型。还能找到聚合后符合条件的结果
POST employees/_search
{
"aggs": {
"jobs": {
"terms": {
"field": "job.keyword"
}
}
},
"post_filter": {
"match": {
"job.keyword": "Dev Manager"
}
}
}
Global
#global
POST employees/_search
{
"size": 0,
"query": {
"range": {
"age": {
"gte": 40
}
}
},
"aggs": {
"jobs": {
"terms": {
"field":"job.keyword"
}
},
"all":{
"global":{},//Golbal,无视query,对全部文档进行统计
"aggs":{
"salary_avg":{
"avg":{
"field":"salary"
}
}
}
}
}
}
排序
- 指定order,按照count和key 排序
- 默认情况,按照count降序排序
- 指定size,就能返回相应的桶
#排序 order #count正序 and key倒叙 POST employees/_search { "size": 0, "query": { "range": { "age": { "gte": 20 } } }, "aggs": { "jobs": { "terms": { "field": "job.keyword", "order": [ { "_count": "asc" }, { "_key": "desc" } ] } } } }
基于子聚合的值排序
- 基于子聚合的数值进行排序
POST employees/_search { "size": 0, "aggs": { "jobs": { "terms": { "field": "job.keyword", "order": [ { "avg_salary": "desc" } ] }, "aggs": { "avg_salary": { "avg": { "field": "salary" } } } } } }
- 使用子聚合,Aggregation name
POST employees/_search { "size": 0, "aggs": { "jobs": { "terms": { "field": "job.keyword", "order": [ { "stats_salary.min": "desc" } ] }, "aggs": { "stats_salary": { "stats": { "field": "salary" } } } } } }
本作品采用《CC 协议》,转载必须注明作者和本文链接