美文网首页elasticsearchelasticsearch玩转大数据
三十三、Elasticsearch聚合分析--取销量最高

三十三、Elasticsearch聚合分析--取销量最高

作者: 编程界的小学生 | 来源:发表于2017-07-19 13:00 被阅读129次

    1、家电卖场案例背景

    以一个家电卖场中的电视销售数据为背景,来对各种品牌,各种颜色的电视的销量和销售额,进行各种各样角度的分析

    2、建立mapping

    PUT /tvs
    {
        "mappings": {
            "sales": {
                "properties": {
                    "price": {
                        "type": "long"
                    },
                    "color": {
                        "type": "keyword"
                    },
                    "brand": {
                        "type": "keyword"
                    },
                    "sold_date": {
                        "type": "date"
                    }
                }
            }
        }
    }
    

    3、数据准备

    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" }
    

    4、统计哪种颜色的电视销量最高

    GET /tvs/sales/_search
    {
      "size": 0,
      "aggs": {
        "popular_color": {
          "terms": {
            "field": "color"
          }
        }
      }
    }
    

    解释:

    size:0代表只获取聚合结果,而不要执行聚合的原始document。
    aggs:聚合固定语法,要对一份数据执行分组聚合操作。
    poluar_color:就是对每个aggs都要起一个名字,这个名字是随机的,你随便取什么都行。
    terms:根据字段的值进行分组。
    field:根据指定的字段的值进行分组
    

    返回结果

    {
      "took": 4,
      "timed_out": false,
      "_shards": {
        "total": 5,
        "successful": 5,
        "failed": 0
      },
      "hits": {
        "total": 8,
        "max_score": 0,
        "hits": []
      },
      "aggregations": {
        "popular_color": {
          "doc_count_error_upper_bound": 0,
          "sum_other_doc_count": 0,
          "buckets": [
            {
              "key": "红色",
              "doc_count": 4
            },
            {
              "key": "绿色",
              "doc_count": 2
            },
            {
              "key": "蓝色",
              "doc_count": 2
            }
          ]
        }
      }
    }
    

    解释:

    hits.hits:我们指定了size是0,所以hits.hits就是空的,否则会把执行聚合的那些原始数据给你返回回来。
    aggregations:聚合结果。
    popular_color:我们指定的某个聚合的名称。
    buckets:根据我们指定的field划分出的buckets。
    key:每个buckets对应的那个值。
    doc_count:这个bucket分组内,有多少个数据。
    

    默认排序规则:按照doc_count降序排序

    若有兴趣,欢迎来加入群,【Java初学者学习交流群】:458430385,此群有Java开发人员、UI设计人员和前端工程师。有问必答,共同探讨学习,一起进步!
    欢迎关注我的微信公众号【Java码农社区】,会定时推送各种干货:


    qrcode_for_gh_577b64e73701_258.jpg

    相关文章

      网友评论

        本文标题:三十三、Elasticsearch聚合分析--取销量最高

        本文链接:https://www.haomeiwen.com/subject/ozhlkxtx.html