主要知识点:
- _global bucket的使用
本例以搜索单个品牌和所有品牌的销量对比进行学习_global 。es在进行aggregation操作时都只只是在一个scope中进行聚合等操作,对于一个搜索+聚合的操作,那么这个聚合操作就必须在搜索操作所探索的结果范围内。因此就需要用到_global语法来对全部数据进行聚合。
本例要求得出两个结果,一个结果是基于query搜索结果来聚合的; 另一个结果,是对所有数据执行聚合。
语法
GET /tvs/sales/_search
{
"size": 0,
"query": {"term": {"brand": {"value": "长虹"}}},
"aggs": {
"single_brand_avg_price": {"terms": {"field": "color"}},
"all":{
"global": {},
"aggs": {"all_brand_avg_price": {"avg": {"field": "price"}}}
}
}
}
注意语法层级。执行结果如下:
"aggregations": {
"all": {
"doc_count": 8,
"all_brand_avg_price": {
"value": 2650
}
},
"single_brand_avg_price": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"key": "红色",
"doc_count": 3
}
]
}
}
}
global:就是global bucket,就是将所有数据纳入聚合的scope,而不管之前的query结果。
single_brand_avg_price:就是针对query搜索结果,执行的,拿到的,就是长虹品牌的平均价格
all.all_brand_avg_price:拿到所有品牌的平均价格