zoukankan      html  css  js  c++  java
  • Elastic Stack:es 聚合查询入门

    聚合前提:聚合是对query查询出来的数据进行聚合。

    需求:计算每个studymodel下的商品数量

    加上 "size":0后,可以去除掉搜索结果中的hit命中数据。

    GET /book/_search
    {
      "size": 0, 
      "query": {
        "match_all": {}
      }, 
      "aggs": {
        "group_by_model": {
          "terms": { "field": "studymodel" }
        }
      }
    }
    

    需求:计算每个tags下的商品数量

    设置字段"fielddata": true

    PUT /book/_mapping/
    {
      "properties": {
        "tags": {
          "type": "text",
          "fielddata": true
        }
      }
    }
    

     查询:

    PUT /book/_mapping/
    {
      "properties": {
        "tags": {
          "type": "text",
          "fielddata": true
        }
      }
    }

    先分组,再算每组的平均值,计算每个tag下的商品的平均价格

    GET /book/_search
    {
        "size": 0,
        "aggs" : {
            "group_by_tags" : {
                "terms" : { 
                  "field" : "tags" 
                },
                "aggs" : {
                    "avg_price" : {
                        "avg" : { "field" : "price" }
                    }
                }
            }
        }
    }
    

    计算每个tag下的商品的平均价格,并且按照平均价格降序排序

    GET /book/_search
    {
        "size": 0,
        "aggs" : {
            "group_by_tags" : {
                "terms" : { 
                  "field" : "tags",
                  "order": {
                    "avg_price": "desc"
                  }
                },
                "aggs" : {
                    "avg_price" : {
                        "avg" : { "field" : "price" }
                    }
                }
            }
        }
    }

    按照指定的价格范围区间进行分组,然后在每组内再按照tag进行分组,最后再计算每组的平均价格

    GET /book/_search
    {
      "size": 0,
      "aggs": {
        "group_by_price": {
          "range": {
            "field": "price",
            "ranges": [
              {
                "from": 0,
                "to": 40
              },
              {
                "from": 40,
                "to": 60
              },
              {
                "from": 60,
                "to": 80
              }
            ]
          },
          "aggs": {
            "group_by_tags": {
              "terms": {
                "field": "tags"
              },
              "aggs": {
                "average_price": {
                  "avg": {
                    "field": "price"
                  }
                }
              }
            }
          }
        }
      }
    }

    两个核心概念:bucket和metric 

    bucket:一个数据分组

    metric:对一个数据分组执行的统计

    划分范围 histogram

    histogram:类似于terms,也是进行bucket分组操作,接收一个field,按照这个field的值的各个范围区间,进行bucket分组操作

    GET /tvs/_search
    {
       "size" : 0,
       "aggs":{
          "price":{
             "histogram":{ 
                "field": "price",
                "interval": 2000
             },
             "aggs":{
                "income": {
                   "sum": { 
                     "field" : "price"
                   }
                 }
             }
          }
       }
    }

    interval:2000,划分范围,0~2000,2000~4000,4000~6000,6000~8000,8000~10000,buckets

    bucket有了之后,一样的,去对每个bucket执行avg,count,sum,max,min,等各种metric操作,聚合分析

    按照日期分组聚合

    date_histogram,按照我们指定的某个date类型的日期field,以及日期interval,按照一定的日期间隔,去划分bucket 

     min_doc_count:即使某个日期interval,2017-01-01~2017-01-31中,一条数据都没有,那么这个区间也是要返回的,不然默认是会过滤掉这个区间的

    global bucket:单个品牌与所有品牌销量对比

    aggregation,scope,一个聚合操作,必须在query的搜索结果范围内执行

    出来两个结果,一个结果,是基于query搜索结果来聚合的; 一个结果,是对所有数据执行聚合的

    GET /tvs/_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"
              }
            }
          }
        }
      }
    }
    

      

  • 相关阅读:
    python 三大框架的 介绍。
    爬虫之selenium模拟点击
    多线程爬虫爬取详情页HTML
    机器学习三剑客之Matplotlib基本操作
    机器学习三剑客之Pandas中DataFrame基本操作
    机器学习三剑客之Numpy库基本操作
    小功能——快速制作属于自己的个性二维码
    Django 分页器
    Flask 框架中 上下文基础理念,包括cookie,session存储方法,requset属性,current_app模块和g模块
    Flask 框架 重定向,捕获异常,钩子方法及使用jsonify在网页返回json数据
  • 原文地址:https://www.cnblogs.com/wwjj4811/p/13099511.html
Copyright © 2011-2022 走看看