基于查询结果的聚合和基于聚合结果的查询

一、基于查询结果的聚合

1、基于query的aggs

 1 #价格大于4500的标签进行聚合
 2 GET product/_search
 3 {
 4   "size": 10,
 5   "query": {
 6     "range": {
 7       "price": {
 8         "gte": 4500
 9       }
10     }
11   },
12   "aggs": {
13     "tags_bucket": {
14       "terms": {
15         "field": "tags.keyword"
16       }
17     }
18   }
19 }

2、基于filter的aggs

 1 GET product/_search
 2 {
 3   "query": {
 4     "constant_score": {
 5       "filter": {
 6         "range": {
 7           "price": {
 8             "gte": 4500
 9           }
10         }
11       }
12     }
13   },
14   "aggs": {
15     "tags_bucket": {
16       "terms": {
17         "field": "tags.keyword"
18       }
19     }
20   }
21 }

3、基于bool查询的aggs

 1 GET product/_search
 2 {
 3   "query": {
 4     "bool": {
 5       "filter": {
 6         "range": {
 7           "price": {
 8             "gte": 4500
 9           }
10         }
11       }
12     }
13   },
14   "aggs": {
15     "tags_bucket": {
16       "terms": {
17         "field": "tags.keyword"
18       }
19     }
20   }
21 }

二、基于聚合的查询

 1 #先进行聚合,再使用post_filter进行查询
 2 GET product/_search
 3 {
 4   "aggs": {
 5     "tags_bucket": {
 6       "terms": {
 7         "field": "tags.keyword"
 8       }
 9     }
10   },
11   "post_filter": {
12     "term": {
13       "tags.keyword": "性价比"
14     }
15   }
16 }

三、聚合排序

聚合排序:再聚合后使用order进行排序。

     _count:按照数量进行排序

     _key:按照字典序进行排序,abcd.......

 1 #单级聚合
 2 GET product/_search
 3 {
 4   "size": 0,
 5   "aggs": {
 6     "tags_agg": {
 7       "terms": {
 8         "field": "tags.keyword",
 9         "size": 10,
10         "order": {
11           "_count": "asc"
12         }
13       }
14     }
15   }
16 }
 1 #多级聚合
 2 GET product/_search
 3 {
 4   "size": 0,
 5   "aggs": {
 6     "first_order": {
 7       "terms": {
 8         "field": "tags.keyword",
 9         "order": {
10           "_count": "asc"
11         }
12       },
13       "aggs": {
14         "second_order": {
15           "terms": {
16             "field": "lv.keyword",
17             "order": {
18               "_count": "desc"
19             }
20           }
21         }
22       }
23     }
24   }
25 }
 1 #多层聚合
 2 GET product/_search
 3 {
 4   "aggs": {
 5     "type_avg_price": {
 6       "terms": {
 7         "field": "type.keyword",
 8         "order": {
 9           "agg_stats>stats.min": "asc"
10         }
11       },
12       "aggs": {
13         "agg_stats": {
14           "filter": {
15             "terms": {
16               "type.keyword": [
17                 "耳机",
18                 "手机"
19               ]
20             }
21           },
22           "aggs": {
23             "stats": {
24               "stats": {
25                 "field": "price"
26               }
27             }
28           }
29         }
30       }
31     }
32   }
33 }

 

posted @ 2022-02-11 18:17  showMeTheCodes  阅读(78)  评论(0编辑  收藏  举报