elasticsearch學習筆記(七)——快速入門案例實戰之電商網站商品管理:巢狀聚合,下鑽分析,聚合分析
為了描述ES是如何進行巢狀聚合、下鑽分析,聚合分析。下面通過五個業務需求來進行描述。
1、計算每個tag下的商品數量
由於tag是一個數組,所以其實統計的就是針對tag陣列中的每個值,所有文件中tag欄位中包含這個值的文件數量。
GET /product/_search { "size": 0, "aggs": { "all_tags": { "terms": { "field": "tags", "size": 10 } } } } { "took" : 0, "timed_out" : false, "_shards" : { "total" : 1, "successful" : 1, "skipped" : 0, "failed" : 0 }, "hits" : { "total" : { "value" : 3, "relation" : "eq" }, "max_score" : null, "hits" : [ ] }, "aggregations" : { "all_tags" : { "doc_count_error_upper_bound" : 0, "sum_other_doc_count" : 0, "buckets" : [ { "key" : "fangzhu", "doc_count" : 2 }, { "key" : "meibai", "doc_count" : 1 }, { "key" : "qingxin", "doc_count" : 1 } ] } } }
2、對名稱中包含yagao的商品,計算每個tag下的商品數量
GET /product/_search { "query": { "match": { "name": "yagao" } }, "size": 0, "aggs": { "all_tags": { "terms": { "field": "tags", "size": 10 } } } }
3、計算每個tag下的商品的平均價格
GET /product/_search { "size": 0, "aggs": { "group_by_tags": { "terms": { "field": "tags", "size": 10 }, "aggs": { "avg_price": { "avg": { "field": "price" } } } } } }
4、計算每個tag下商品的平均價格,並且按照平均價格降序排列
GET /product/_search { "size": 0, "aggs": { "group_by_tags": { "terms": { "field": "tags", "size": 10, "order": { "avg_price": "desc" } }, "aggs": { "avg_price": { "avg": { "field": "price" } } } } } }
5、按照指定的價格範圍區間進行分組,然後在每組內在按照tag進行分組,最後在計算每組的平均價格
GET /product/_search { "size": 0, "aggs": { "group_by_price": { "range": { "field": "price", "ranges": [ { "from": 0, "to": 20 }, { "from": 20, "to": 40 }, { "from": 40, "to": 50 } ] }, "aggs": { "group_by_tags": { "terms": { "field": "tags", "size": 10 }, "aggs": { "avg_price": { "avg": { "field": "price" } } } } } } } }