elasticsearch 筆記四:聚合分析
阿新 • • 發佈:2018-11-15
1.第一個分析需求:計算每個tag下的商品數量
GET /ecommerce/product/_search { "aggs": { "group_by_tags": { "terms": { "field": "tags" } } } } ----------------------------------------------------------------------- { "took": 48, "timed_out": false, "_shards": { "total": 5, "successful": 5, "failed": 0 }, "hits": { "total": 4, "max_score": 1, "hits": [ { "_index": "ecommerce", "_type": "product", "_id": "2", "_score": 1, "_source": { "name": "jiajieshi yagao", "desc": "youxiao fangzhu", "price": 25, "producer": "jiajieshi producer", "tags": [ "fangzhu" ] } }, { "_index": "ecommerce", "_type": "product", "_id": "4", "_score": 1, "_source": { "name": "heiren", "desc": "xiren yagao", "price": 50, "producer": "jiajieshi yagao", "tags": [ "heiren" ] } }, { "_index": "ecommerce", "_type": "product", "_id": "1", "_score": 1, "_source": { "name": "heiren", "desc": "xiren yagao", "price": 50, "producer": "jiajieshi yagao", "tags": [ "heiren" ] } }, { "_index": "ecommerce", "_type": "product", "_id": "3", "_score": 1, "_source": { "name": "zhonghua yagao", "desc": "caoben zhiwu", "price": 40, "producer": "zhonghua producer", "tags": [ "qingxin" ] } } ] }, "aggregations": { "group_by_tags": { "doc_count_error_upper_bound": 0, "sum_other_doc_count": 0, "buckets": [ { "key": "heiren", "doc_count": 2 }, { "key": "fangzhu", "doc_count": 1 }, { "key": "qingxin", "doc_count": 1 } ] } } } ============================================================================== GET /ecommerce/product/_search { "size":0, "aggs": { "group_by_tags": { "terms": { "field": "tags" } } } } ----------------------------------------------------------------------------- { "took": 23, "timed_out": false, "_shards": { "total": 5, "successful": 5, "failed": 0 }, "hits": { "total": 4, "max_score": 0, "hits": [] }, "aggregations": { "group_by_tags": { "doc_count_error_upper_bound": 0, "sum_other_doc_count": 0, "buckets": [ { "key": "heiren", "doc_count": 2 }, { "key": "fangzhu", "doc_count": 1 }, { "key": "qingxin", "doc_count": 1 } ] } } }
2.將文字field 的fielddata 屬性設為 true
PUT /ecommerce/_mapping/product/
{
"properties":{
"tags":{
"type":"text",
"fielddata":true
}
}
}
3.聚合分析的需求,先分組,再算每組的平均值,計算每個tag 下的平均價格
GET /ecommerce/product/_search { "size": 0, "aggs": { "group_by_tags": { "terms": { "field": "tags" }, "aggs": { "avg_price": { "avg": { "field": "price" } } } } } } ----------------------------------------------------------------------------- { "took": 15, "timed_out": false, "_shards": { "total": 5, "successful": 5, "failed": 0 }, "hits": { "total": 4, "max_score": 0, "hits": [] }, "aggregations": { "group_by_tags": { "doc_count_error_upper_bound": 0, "sum_other_doc_count": 0, "buckets": [ { "key": "heiren", "doc_count": 2, "avg_price": { "value": 50 } }, { "key": "fangzhu", "doc_count": 1, "avg_price": { "value": 25 } }, { "key": "qingxin", "doc_count": 1, "avg_price": { "value": 40 } } ] } } }
4.第四個資料分析需求:計算每個tag下的商品的平均價格,並且按照平均價格降序排序
GET /ecommerce/product/_search { "aggs": { "all_tags": { "terms": { "field": "tags", "order": { "avg_price": "desc" } }, "aggs": { "avg_price": { "avg": { "field": "price" } } } } } } -------------------------------------------------------------------------- { "took": 9, "timed_out": false, "_shards": { "total": 5, "successful": 5, "failed": 0 }, "hits": { "total": 4, "max_score": 0, "hits": [] }, "aggregations": { "all_tags": { "doc_count_error_upper_bound": 0, "sum_other_doc_count": 0, "buckets": [ { "key": "heiren", "doc_count": 2, "avg_price": { "value": 50 } }, { "key": "qingxin", "doc_count": 1, "avg_price": { "value": 40 } }, { "key": "fangzhu", "doc_count": 1, "avg_price": { "value": 25 } } ] } } }
5.第五個資料分析需求:按照指定的價格範圍區間進行分組,然後在每組內再按照tag進行分組,最後再計算每組的平均價格
GET /ecommerce/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"
},
"aggs": {
"average_price": {
"avg": {
"field": "price"
}
}
}
}
}
}
}
}
------------------------------------------------------------------------------
{
"took": 10,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"failed": 0
},
"hits": {
"total": 4,
"max_score": 0,
"hits": []
},
"aggregations": {
"group_by_price": {
"buckets": [
{
"key": "0.0-20.0",
"from": 0,
"to": 20,
"doc_count": 0,
"group_by_tags": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": []
}
},
{
"key": "20.0-40.0",
"from": 20,
"to": 40,
"doc_count": 1,
"group_by_tags": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"key": "fangzhu",
"doc_count": 1,
"average_price": {
"value": 25
}
}
]
}
},
{
"key": "40.0-50.0",
"from": 40,
"to": 50,
"doc_count": 1,
"group_by_tags": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"key": "qingxin",
"doc_count": 1,
"average_price": {
"value": 40
}
}
]
}
}
]
}
}
}