ElasticSearch6.2.4(12)——aggregation淺解
阿新 • • 發佈:2019-02-10
案例:
PUT /tvs
{
"mappings": {
"sales": {
"properties": {
"price": {
"type": "long"
},
"color": {
"type": "keyword"
},
"brand": {
"type": "keyword"
},
"sold_date": {
"type": "date"
}
}
}
}
}
POST /tvs/sales/_bulk { "index": {}} { "price" : 1000, "color" : "紅色", "brand" : "長虹", "sold_date" : "2016-10-28" } { "index": {}} { "price" : 2000, "color" : "紅色", "brand" : "長虹", "sold_date" : "2016-11-05" } { "index": {}} { "price" : 3000, "color" : "綠色", "brand" : "小米", "sold_date" : "2016-05-18" } { "index": {}} { "price" : 1500, "color" : "藍色", "brand" : "TCL", "sold_date" : "2016-07-02" } { "index": {}} { "price" : 1200, "color" : "綠色", "brand" : "TCL", "sold_date" : "2016-08-19" } { "index": {}} { "price" : 2000, "color" : "紅色", "brand" : "長虹", "sold_date" : "2016-11-05" } { "index": {}} { "price" : 8000, "color" : "紅色", "brand" : "三星", "sold_date" : "2017-01-01" } { "index": {}} { "price" : 2500, "color" : "藍色", "brand" : "小米", "sold_date" : "2017-02-12" }
1.以顏色來分組
GET /tvs/sales/_search
{
"size": 0,
"aggs": {
"color_sale": {
"terms": {
"field": "color"
}
}
}
}
2.統計每個顏色電視的平均價格
GET /tvs/sales/_search { "size": 0, "aggs": { "color_sale": { "terms": { "field": "color" }, "aggs": { "avg_price": { "avg": { "field": "price" } } } } } }
3.從顏色到品牌進行下鑽分析,每種顏色的平均價格,以及找到每種顏色每個品牌的平均價格
GET /tvs/sales/_search { "size": 0, "aggs": { "color_sale": { "terms": { "field": "color" }, "aggs": { "avg_price": { "avg": { "field": "price" } }, "group_by_brand":{ "terms": { "field": "brand" }, "aggs": { "brand_avg_color": { "avg": { "field": "price" } } } } } } } }
4.統計每種顏色電視最大,最小,平均,總價格
GET /tvs/sales/_search
{
"size": 0,
"aggs": {
"color_sale": {
"terms": {
"field": "color"
},
"aggs": {
"min_price": {
"min": {
"field": "price"
}
},
"max_price": {
"max": {
"field": "price"
}
},
"sum_price": {
"min": {
"field": "price"
}
},
"avg_price": {
"min": {
"field": "price"
}
}
}
}
}
}
5.以價格2000為區間統計總價格
GET /tvs/sales/_search
{
"size": 0,
"aggs": {
"group_by_price": {
"histogram": {
"field": "price",
"interval": 2000
},
"aggs": {
"sum_price": {
"sum": {
"field": "price"
}
}
}
}
}
}
6以月為單位進行統計總價格
interval:區間段
format:日期格式
min_doc_count:預設值
entended_bounds:裡面是範圍
GET /tvs/sales/_search
{
"size": 0,
"aggs": {
"group_by_date": {
"date_histogram": {
"field": "sold_date",
"interval": "month",
"format": "yyyy-MM-dd",
"min_doc_count": 0,
"extended_bounds": {
"min": "2016-01-01",
"max": "2017-01-01"
}
},
"aggs": {
"sum_price": {
"sum": {
"field": "price"
}
}
}
}
}
}
7.搜尋小米品牌有多少種顏色
GET /tvs/sales/_search
{
"size": 0,
"query": {
"match": {
"brand": "小米"
}
},
"aggs": {
"group_bt_color": {
"terms": {
"field": "color"
}
}
}
}
8.單個品牌的平均價格和總價格進行比較
GET /tvs/sales/_search
{
"size": 0,
"query": {
"match": {
"brand": "小米"
}
},
"aggs": {
"group_bt_color": {
"avg": {
"field": "price"
}
},
"all":{
"global": {},
"aggs": {
"all_avg_price": {
"avg": {
"field": "price"
}
}
}
}
}
}
9.獲取價格大於1200的平均價格
GET /tvs/sales/_search
{
"size": 0,
"query": {
"bool": {
"filter": {
"range": {
"price": {
"gte": 1200
}
}
}
}
},
"aggs": {
"avg_price": {
"avg": {
"field": "price"
}
}
}
}
10.統計最近一年,兩年,三年的總銷售價格(年用y,月用M,天用d)
GET /tvs/sales/_search
{
"size": 0,
"aggs": {
"last_1y": {
"filter": {
"range": {
"sold_date": {
"gte": "now-1y"
}
}
},
"aggs": {
"sum_price":{
"sum": {
"field": "price"
}
}
}
},
"last_2y": {
"filter": {
"range": {
"sold_date": {
"gte": "now-2y"
}
}
},
"aggs": {
"sum_price":{
"sum": {
"field": "price"
}
}
}
},
"last_3y": {
"filter": {
"range": {
"sold_date": {
"gte": "now-3y"
}
}
},
"aggs": {
"sum_price":{
"sum": {
"field": "price"
}
}
}
}
}
}
11.按顏色分組,並且按平均價格排序
GET /tvs/sales/_search
{
"size": 0,
"aggs": {
"group_by_color":{
"terms": {
"field": "color",
"order": {
"avg_price": "desc"
}
},
"aggs": {
"avg_price": {
"avg": {
"field": "price"
}
}
}
}
}
}