Elasticsearch进阶笔记第十九篇

118 阅读4分钟

Elasticsearch高手进阶篇(38)

深入聚合数据分析_实战hitogram按价格区间统计电视销量和销售额

  • histogram:类似于terms,也是进行bucket分组操作,接收一个field,按照这个field的值的各个范围区间,进行bucket分组操作
 "histogram":{ 
   "field": "price",
   "interval": 2000
 },
  • interval:2000,划分范围,0-2000,2000-4000,4000-6000,6000-8000,8000-10000,buckets去根据price的值,比如2500,看落在哪个区间内,比如2000-4000,此时就会将这条数据放入2000-4000对应的那个bucket中

  • bucket划分的方法,terms,将field值相同的数据划分到一个bucket中

    • bucket有了之后,一样的,去对每个bucket执行avg,count,sum,max,min,等各种metric操作,聚合分析
 GET /waws_tvs/sales/_search
 {
    "size" : 0,
    "aggs":{
       "price":{
          "histogram":{ 
             "field": "price",
             "interval": 2000
          },
          "aggs":{
             "revenue": {
                "sum": { 
                  "field" : "price"
                }
              }
          }
       }
    }
 }
 ​
 {
   "took": 17,
   "timed_out": false,
   "_shards": {
     "total": 5,
     "successful": 5,
     "failed": 0
   },
   "hits": {
     "total": 8,
     "max_score": 0,
     "hits": []
   },
   "aggregations": {
     "price": {
       "buckets": [
         {
           "key": 0,
           "doc_count": 3,
           "revenue": {
             "value": 3700
           }
         },
         {
           "key": 2000,
           "doc_count": 4,
           "revenue": {
             "value": 9500
           }
         },
         {
           "key": 4000,
           "doc_count": 0,
           "revenue": {
             "value": 0
           }
         },
         {
           "key": 6000,
           "doc_count": 0,
           "revenue": {
             "value": 0
           }
         },
         {
           "key": 8000,
           "doc_count": 1,
           "revenue": {
             "value": 8000
           }
         }
       ]
     }
   }
 }

Elasticsearch高手进阶篇(39)

深入聚合数据分析_实战date hitogram之统计每月电视销量

date hitogram

  • bucket,分组操作,histogram,按照某个值指定的interval,划分一个一个的bucket
  • date histogram

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

date interval = 1m,

  • 2017-01-01~2017-01-31,就是一个bucket
  • 2017-02-01~2017-02-28,就是一个bucket

然后会去扫描每个数据的date field,判断date落在哪个bucket中,就将其放入那个bucket

  • 2017-01-05,就将其放入2017-01-01~2017-01-31,就是一个bucket
  • min_doc_count:即使某个日期interval,2017-01-01~2017-01-31中,一条数据都没有,那么这个区间也是要返回的,不然默认是会过滤掉这个区间的
  • extended_bounds,min,max:划分bucket的时候,会限定在这个起始日期,和截止日期内
 GET /waws_tvs/sales/_search
 {
    "size" : 0,
    "aggs": {
       "sales": {
          "date_histogram": {
             "field": "sold_date",
             "interval": "month", 
             "format": "yyyy-MM-dd",
             "min_doc_count" : 0, 
             "extended_bounds" : { 
                 "min" : "2016-01-01",
                 "max" : "2017-12-31"
             }
          }
       }
    }
 }
 
 {
   "took": 8,
   "timed_out": false,
   "_shards": {
     "total": 5,
     "successful": 5,
     "failed": 0
   },
   "hits": {
     "total": 8,
     "max_score": 0,
     "hits": []
   },
   "aggregations": {
     "sales": {
       "buckets": [
         {
           "key_as_string": "2016-01-01",
           "key": 1451606400000,
           "doc_count": 0
         },
         {
           "key_as_string": "2016-02-01",
           "key": 1454284800000,
           "doc_count": 0
         },
         {
           "key_as_string": "2016-03-01",
           "key": 1456790400000,
           "doc_count": 0
         },
         {
           "key_as_string": "2016-04-01",
           "key": 1459468800000,
           "doc_count": 0
         },
         {
           "key_as_string": "2016-05-01",
           "key": 1462060800000,
           "doc_count": 1
         },
         {
           "key_as_string": "2016-06-01",
           "key": 1464739200000,
           "doc_count": 0
         },
         {
           "key_as_string": "2016-07-01",
           "key": 1467331200000,
           "doc_count": 1
         },
         {
           "key_as_string": "2016-08-01",
           "key": 1470009600000,
           "doc_count": 1
         },
         {
           "key_as_string": "2016-09-01",
           "key": 1472688000000,
           "doc_count": 0
         },
         {
           "key_as_string": "2016-10-01",
           "key": 1475280000000,
           "doc_count": 1
         },
         {
           "key_as_string": "2016-11-01",
           "key": 1477958400000,
           "doc_count": 2
         },
         {
           "key_as_string": "2016-12-01",
           "key": 1480550400000,
           "doc_count": 0
         },
         {
           "key_as_string": "2017-01-01",
           "key": 1483228800000,
           "doc_count": 1
         },
         {
           "key_as_string": "2017-02-01",
           "key": 1485907200000,
           "doc_count": 1
         },
         {
           "key_as_string": "2017-03-01",
           "key": 1488326400000,
           "doc_count": 0
         },
         {
           "key_as_string": "2017-04-01",
           "key": 1491004800000,
           "doc_count": 0
         },
         {
           "key_as_string": "2017-05-01",
           "key": 1493596800000,
           "doc_count": 0
         },
         {
           "key_as_string": "2017-06-01",
           "key": 1496275200000,
           "doc_count": 0
         },
         {
           "key_as_string": "2017-07-01",
           "key": 1498867200000,
           "doc_count": 0
         },
         {
           "key_as_string": "2017-08-01",
           "key": 1501545600000,
           "doc_count": 0
         },
         {
           "key_as_string": "2017-09-01",
           "key": 1504224000000,
           "doc_count": 0
         },
         {
           "key_as_string": "2017-10-01",
           "key": 1506816000000,
           "doc_count": 0
         },
         {
           "key_as_string": "2017-11-01",
           "key": 1509494400000,
           "doc_count": 0
         },
         {
           "key_as_string": "2017-12-01",
           "key": 1512086400000,
           "doc_count": 0
         }
       ]
     }
   }
 }