Elasticsearch學習之深入聚合分析三---案例實戰
阿新 • • 發佈:2017-07-01
引用 實戰 avg buck oba core 電視 針對 過濾
1. 統計指定品牌下每個顏色的銷量
任何的聚合,都必須在搜索出來的結果數據中進行,搜索結果,就是聚合分析操作的scope
GET /tvs/sales/_search { "size": 0, "query": { "term": { "brand": { "value": "小米" } } }, "aggs": { "group_by_color": { "terms": { "field": "color" } } } }
2. 單個品牌與所有品牌銷量對比
一個聚合操作,必須在query的搜索結果範圍內執行出來兩個結果,一個結果,是基於query搜索結果來聚合的; 一個結果,是對所有數據執行聚合的
GET /tvs/sales/_search { "size": 0, "query": { "term": { "brand": { "value": "長虹" } } }, "aggs": { "single_brand_avg_price": { "avg": { "field": "price" } }, "all": { "global": {}, "aggs": { "all_brand_avg_price": { "avg": { "field": "price" } } } } } }
global:就是global bucket,就是將所有數據納入聚合的scope,而不管之前的query
3. 統計價格大於1200的電視平均價格
搜索+聚合,過濾+聚合
GET /tvs/sales/_search { "size": 0, "query": { "constant_score": { "filter": { "range": { "price": { "gte": 1200 } } } } }, "aggs": { "avg_price": { "avg": { "field": "price" } } } }
4. 統計電視品牌最近一個月的銷量
GET /tvs/sales/_search { "size": 0, "query": { "term": { "brand": { "value": "長虹" } } }, "aggs": { "recent_150d": { "filter": { "range": { "sold_date": { "gte": "now-150d" } } }, "aggs": { "recent_150d_avg_price": { "avg": { "field": "price" } } } }, "recent_140d": { "filter": { "range": { "sold_date": { "gte": "now-140d" } } }, "aggs": { "recent_140d_avg_price": { "avg": { "field": "price" } } } }, "recent_130d": { "filter": { "range": { "sold_date": { "gte": "now-130d" } } }, "aggs": { "recent_130d_avg_price": { "avg": { "field": "price" } } } } } }
aggs.filter,針對的是聚合去做的,如果放query裏面的filter,是全局的,會對所有的數據都有影響
但是,如果,比如說你要統計長虹電視最近1個月的平均值; 最近3個月的平均值; 最近6個月的平均值
bucket filter:就是對不同的bucket下的aggs,進行filter
5. 統計每個顏色的電視的銷售額,按照銷售額降序排序
GET /tvs/sales/_search { "size": 0, "aggs": { "group_by_color": { "terms": { "field": "color", "order": { "avg_price": "asc" } }, "aggs": { "avg_price": { "avg": { "field": "price" } } } } } }
類似引用其他變量,本例中就是引用aggs中統計的每個顏色電視的平均價格
6. 顏色+品牌下鉆分析時按最深層metric進行排序
GET /tvs/sales/_search { "size": 0, "aggs": { "group_by_color": { "terms": { "field": "color" }, "aggs": { "group_by_brand": { "terms": { "field": "brand", "order": { "avg_price": "desc" } }, "aggs": { "avg_price": { "avg": { "field": "price" } } } } } } } }
按照每種顏色下的每種品牌的平均價格進行降序排列
Elasticsearch學習之深入聚合分析三---案例實戰