1.简介
elasticsearch聚合分析默认的作用范围是query的结果集,但是可以通过query、filter、post_filter和global来改变其作用范围。
2.query
对查询结果集进行聚合分析,如先过滤年龄大于25的文档,然后再按照job进行分桶。
POST /employee/_search
{
"size": 0,
"query": {
"range": {
"age": {
"gt": "25"
}
}
},
"aggs": {
"salary_avg_terms": {
"terms": {
"field": "job",
"size": 10
}
}
}
}
{
"took" : 2,
"timed_out" : false,
"_shards" : {
"total" : 5,
"successful" : 5,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 5,
"relation" : "eq"
},
"max_score" : null,
"hits" : [ ]
},
"aggregations" : {
"salary_avg_terms" : {
"doc_count_error_upper_bound" : 0,
"sum_other_doc_count" : 0,
"buckets" : [
{
"key" : "Java engineer",
"doc_count" : 3
},
{
"key" : "Technical director",
"doc_count" : 1
},
{
"key" : "Vue engineer",
"doc_count" : 1
}
]
}
}
}
3.filter
为某个聚合分析设定过滤条件,从而在不更改整体query语句的情况下修改作用范围,如先过滤薪水大于20000的文档,然后再按照job进行分桶。
POST /employee/_search
{
"size": 0,
"aggs": {
"salary_filter_terms": {
"filter": {
"range": {
"salary": {
"from": 20000
}
}
},
"aggs": {
"job_terms": {
"terms": {
"field": "job"
}
}
}
}
}
}
{
"took" : 1,
"timed_out" : false,
"_shards" : {
"total" : 5,
"successful" : 5,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 7,
"relation" : "eq"
},
"max_score" : null,
"hits" : [ ]
},
"aggregations" : {
"salary_filter_terms" : {
"doc_count" : 5,
"job_terms" : {
"doc_count_error_upper_bound" : 0,
"sum_other_doc_count" : 0,
"buckets" : [
{
"key" : "Java engineer",
"doc_count" : 3
},
{
"key" : "Technical director",
"doc_count" : 1
},
{
"key" : "Vue engineer",
"doc_count" : 1
}
]
}
}
}
}