日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ElasticSearch聚合语法学习(bucket,metric,hitogram,date hitogram)

發布時間:2024/4/11 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ElasticSearch聚合语法学习(bucket,metric,hitogram,date hitogram) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

ElasticSearch聚合語法學習


目錄

  • bucket與metric兩個核心概念
  • 插入數據
  • 統計哪種顏色電視銷量最高
  • 統計每種顏色電視平均價格
  • bucket嵌套實現顏色+品牌的多層下鉆
  • 統計每種顏色電視最大最小,總和價格
  • hitogram按價格區間統計電視銷量和銷售額
  • date hitogram之統計每月電視銷量
  • 下鉆分析之統計每季度每個品牌的銷售額

  • 1. bucket與metric兩個核心概念

  • bucket:對數據分組
  • city name 北京 小李 北京 小王 上海 小張 上海 小麗 上海 小陳
  • 基于city劃分buckets,劃分出來兩個bucket,一個是北京bucket,一個是上海bucket

  • 北京bucket:包含了2個人,小李,小王
  • 上海bucket:包含了3個人,小張,小麗,小陳
  • 按照某個字段進行bucket劃分,那個字段的值相同的那些數據,就會被劃分到一個bucket中

  • 有一些mysql的sql知識的話,聚合,首先第一步就是分組,對每個組內的數據進行聚合分析,分組,就是我們的bucket

  • metric:對一個數據分組執行的統計

  • 當我們有了一堆bucket之后,就可以對每個bucket中的數據進行聚合分詞了,比如說計算一個bucket內所有數據的數量,或者計算一個bucket內所有數據的平均值,最大值,最小值

  • metric,就是對一個bucket執行的某種聚合分析的操作,比如說求平均值,求最大值,求最小值

  • select count(*) from access_log group by user_id
  • bucket:group by user_id --> 那些user_id相同的數據,就會被劃分到一個bucket中
  • metric:count(*),對每個user_id bucket中所有的數據,計算一個數量

  • 2. 插入數據

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

    3. 統計哪種顏色電視銷量最高

    GET /tvs/sales/_search {"size" : 0,"aggs" : { "popular_colors" : { "terms" : { "field" : "color"}}} }
  • size:只獲取聚合結果,而不要執行聚合的原始數據
  • aggs:固定語法,要對一份數據執行分組聚合操作
  • popular_colors:就是對每個aggs,都要起一個名字,這個名字是隨機的,你隨便取什么都ok
  • terms:根據字段的值進行分組
  • field:根據指定的字段的值進行分組
  • 相當于:select color,count(*) from tbl group by color;

  • 4. 統計每種顏色電視平均價格

    GET /tvs/sales/_search {"size" : 0,"aggs": {"colors": {"terms": {"field": "color"},"aggs": { "avg_price": { "avg": {"field": "price" }}}}} }
  • 按照color去分bucket,可以拿到每個color bucket中的數量,這個僅僅只是一個bucket操作,doc_count其實只是es的bucket操作默認執行的一個內置metric

  • 除了bucket操作,分組,還要對每個bucket執行一個metric聚合統計操作

  • 在一個aggs執行的bucket操作(terms),平級的json結構下,再加一個aggs,這個第二個aggs內部,同樣取個名字,執行一個metric操作,avg,對之前的每個bucket中的數據的指定的field,price field,求一個平均值

  • "aggs": { "avg_price": { "avg": {"field": "price" }} }
  • metric,就是一個對一個bucket分組操作之后,對每個bucket都要執行的一個metric

  • 第一個metric,avg,求指定字段的平均值


  • 5. bucket嵌套實現顏色+品牌的多層下鉆

  • 從顏色到品牌進行下鉆分析,每種顏色的平均價格,以及找到每種顏色每個品牌的平均價格

  • 我們可以進行多層次的下鉆

  • 比如說,現在紅色的電視有4臺,同時這4臺電視中,有3臺是屬于長虹的,1臺是屬于小米的

  • 紅色電視中的3臺長虹的平均價格是多少?
  • 紅色電視中的1臺小米的平均價格是多少?
  • 下鉆的意思是,已經分了一個組了,比如說顏色的分組,然后還要繼續對這個分組內的數據,再分組,比如一個顏色內,還可以分成多個不同的品牌的組,最后對每個最小粒度的分組執行聚合分析操作,這就叫做下鉆分析

  • es,下鉆分析,就要對bucket進行多層嵌套,多次分組

  • 按照多個維度(顏色+品牌)多層下鉆分析,而且學會了每個下鉆維度(顏色,顏色+品牌),都可以對每個維度分別執行一次metric聚合操作

  • GET /tvs/sales/_search {"size": 0,"aggs": {"group_by_color": {"terms": {"field": "color"},"aggs": {"color_avg_price": {"avg": {"field": "price"}},"group_by_brand": {"terms": {"field": "brand"},"aggs": {"brand_avg_price": {"avg": {"field": "price"}}}}}}} } {"took": 8,"timed_out": false,"_shards": {"total": 5,"successful": 5,"failed": 0},"hits": {"total": 8,"max_score": 0,"hits": []},"aggregations": {"group_by_color": {"doc_count_error_upper_bound": 0,"sum_other_doc_count": 0,"buckets": [{"key": "紅色","doc_count": 4,"color_avg_price": {"value": 3250},"group_by_brand": {"doc_count_error_upper_bound": 0,"sum_other_doc_count": 0,"buckets": [{"key": "長虹","doc_count": 3,"brand_avg_price": {"value": 1666.6666666666667}},{"key": "三星","doc_count": 1,"brand_avg_price": {"value": 8000}}]}},{"key": "綠色","doc_count": 2,"color_avg_price": {"value": 2100},"group_by_brand": {"doc_count_error_upper_bound": 0,"sum_other_doc_count": 0,"buckets": [{"key": "TCL","doc_count": 1,"brand_avg_price": {"value": 1200}},{"key": "小米","doc_count": 1,"brand_avg_price": {"value": 3000}}]}},{"key": "藍色","doc_count": 2,"color_avg_price": {"value": 2000},"group_by_brand": {"doc_count_error_upper_bound": 0,"sum_other_doc_count": 0,"buckets": [{"key": "TCL","doc_count": 1,"brand_avg_price": {"value": 1500}},{"key": "小米","doc_count": 1,"brand_avg_price": {"value": 2500}}]}}]}} }

    6. 統計每種顏色電視最大最小,總和價格

  • count:bucket,terms,自動就會有一個doc_count,就相當于是count

  • avg:avg aggs,求平均值

  • max:求一個bucket內,指定field值最大的那個數據

  • min:求一個bucket內,指定field值最小的那個數據

  • sum:求一個bucket內,指定field值的總和

  • 一般來說,90%的常見的數據分析的操作,metric,無非就是count,avg,max,min,sum

  • GET /tvs/sales/_search {"size" : 0,"aggs": {"colors": {"terms": {"field": "color"},"aggs": {"avg_price": { "avg": { "field": "price" } },"min_price" : { "min": { "field": "price"} }, "max_price" : { "max": { "field": "price"} },"sum_price" : { "sum": { "field": "price" } } }}} } {"took": 16,"timed_out": false,"_shards": {"total": 5,"successful": 5,"failed": 0},"hits": {"total": 8,"max_score": 0,"hits": []},"aggregations": {"group_by_color": {"doc_count_error_upper_bound": 0,"sum_other_doc_count": 0,"buckets": [{"key": "紅色","doc_count": 4,"max_price": {"value": 8000},"min_price": {"value": 1000},"avg_price": {"value": 3250},"sum_price": {"value": 13000}},{"key": "綠色","doc_count": 2,"max_price": {"value": 3000},"min_price": {"value":}, 1200"avg_price": {"value": 2100},"sum_price": {"value": 4200}},{"key": "藍色","doc_count": 2,"max_price": {"value": 2500},"min_price": {"value": 1500},"avg_price": {"value": 2000},"sum_price": {"value": 4000}}]}} }

    7. 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 /tvs/sales/_search {"size" : 0,"aggs":{"price":{"histogram":{ "field": "price","interval": 2000},"aggs":{"revenue": {"sum": { "field" : "price"}}}}} } {"took": 13,"timed_out": false,"_shards": {"total": 5,"successful": 5,"failed": 0},"hits": {"total": 8,"max_score": 0,"hits": []},"aggregations": {"group_by_price": {"buckets": [{"key": 0,"doc_count": 3,"sum_price": {"value": 3700}},{"key": 2000,"doc_count": 4,"sum_price": {"value": 9500}},{"key": 4000,"doc_count": 0,"sum_price": {"value": 0}},{"key": 6000,"doc_count: {"value":": 0,"sum_price" 0}},{"key": 8000,"doc_count": 1,"sum_price": {"value": 8000}}]}} }

    8. date hitogram之統計每月電視銷量

  • 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 /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": 16,"timed_out": false,"_shards": {"total": 5,"successful": 5,"failed": 0},"hits": {"total": 8,"max_score": 0,"hits": []},"aggregations": {"group_by_sold_date": {"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_strin"key_as_string": "2016-09-01","key": 1472688000000,"doc_count": 0},g": "2016-08-01","key": 1470009600000,"doc_count": 1},{{"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}]}} }

    9. 下鉆分析之統計每季度每個品牌的銷售額

    GET /tvs/sales/_search {"size": 0,"aggs": {"group_by_sold_date": {"date_histogram": {"field": "sold_date","interval": "quarter","format": "yyyy-MM-dd","min_doc_count": 0,"extended_bounds": {"min": "2016-01-01","max": "2017-12-31"}},"aggs": {"group_by_brand": {"terms": {"field": "brand"},"aggs": {"sum_price": {"sum": {"field": "price"}}}},"total_sum_price": {"sum": {"field": "price"}}}}} } {"took": 10,"timed_out": false,"_shards": {"total": 5,"successful": 5,"failed": 0},"hits": {"total": 8,"max_score": 0,"hits": []},"aggregations": {"group_by_sold_date": {"buckets": [{"key_as_string": "2016-01-01","key": 1451606400000,"doc_count": 0,"total_sum_price": {"value": 0},"group_by_brand": {"doc_count_error_upper_bound": 0,"sum_other_doc_count": 0,"buckets": []}},{"key_as_string": "2016-04-01","key": 1459468800000,"doc_count": 1,"total_sum_price": {"value": 3000},"group_by_brand": {"doc_count_error_upper_bound": 0,"sum_other_doc_count": 0,"buckets": [{"key": "小米","doc_count": 1,"sum_price": {"value": 3000}}]}},{"key_as_string": "2016-07-01","key": 1467331200000,"doc_count": 2,"total_sum_price": {"value": 2700},"group_by_brand": {"doc_count_error_upper_bound": 0,"sum_other_doc_count": 0,"buckets": [{"key": "TCL","doc_count": 2,"sum_price": {"value": 2700}}]}},{"key_as_string": "2016-10-01","key": 1475280000000,"doc_count": 3,"total_sum_price": {"value": 5000},"group_by_brand": {"doc_count_error_upper_bound": 0,"sum_other_doc_count": 0,"buckets": [{"key": "長虹","doc_count": 3,"sum_price": {"value": 5000}}]}},{"key_as_string": "2017-01-01","key": 1483228800000,"doc_count": 2,"total_sum_price": {"value": 10500},"group_by_brand": {"doc_count_error_upper_bound": 0,"sum_other_doc_count": 0,"buckets": [{"key": "三星","doc_count": 1,"sum_price": {"value": 8000}},{"key": "小米","doc_count": 1,"sum_price": {"value": 2500}}]}},{"key_as_string": "2017-04-01","key": 1491004800000,"doc_count": 0,"total_sum_price": {"value": 0},"group_by_brand": {"doc_count_error_upper_bound": 0,"sum_other_doc_count": 0,"buckets": []}},{"key_as_string": "2017-07-01","key": 1498867200000,"doc_count": 0,"total_sum_price": {"value": 0},"group_by_brand": {"doc_count_error_upper_bound": 0,"sum_other_doc_count": 0,"buckets": []}},{"key_as_string": "2017-10-01","key": 1506816000000,"doc_count": 0,"total_sum_price": {"value": 0},"group_by_brand": {"doc_count_error_upper_bound": 0,"sum_other_doc_count": 0,"buckets": []}}]}} }

    總結

    以上是生活随笔為你收集整理的ElasticSearch聚合语法学习(bucket,metric,hitogram,date hitogram)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 日本乱淫视频 | 97精品人人妻人人 | 亚洲天堂久久久 | 偷拍一区二区三区四区 | 欧美精品三级 | 国内91视频 | 性视频在线 | 久热最新视频 | 国产一二在线 | 日韩人妻一区二区三区蜜桃视频 | 久草操 | 欧美偷拍另类 | 国产精品一区在线观看你懂的 | 亚洲天堂社区 | 都市激情 亚洲 | 日韩人妻无码一区二区三区 | 用舌头去添高潮无码视频 | 免费在线播放av | 中文字幕一区二区三区日韩精品 | 久久久1 | wwwww在线观看 | 日韩视频三区 | 福利视频在线播放 | 免费成人深夜在线观看 | 国产成人无码一二三区视频 | 日本成人黄色 | 字幕网在线观看 | 在线观看国产一区二区三区 | 97精品国产97久久久久久春色 | 日韩久久精品一区二区 | 国产日韩欧美一区二区 | 亚洲逼院| 日韩午夜精品视频 | 久草中文在线视频 | 国产精品久久久久久久久毛片 | 国色综合| 亚洲av日韩av高潮潮喷无码 | 欧美激情免费 | 国产一av | 成人黄色一区二区 | 日韩 欧美 自拍 | 亚洲三级黄色片 | 黄色片在线观看免费 | 国产精品免费一区二区三区 | 欧美精品偷拍 | 日本美女在线 | 日本熟妇一区二区三区 | 特大黑人巨交吊性xxxxhd | 久久性精品 | 国产免费无遮挡 | 嫩草大剧院 | 日本少妇xxx | 青娱乐福利视频 | 日本精品中文字幕 | 高潮爽爆喷水h | 欧美婷婷六月丁香综合色 | 91av在线看 | 视色av | 性色av网址| 国产微拍精品 | 精品人妻人伦一区二区有限公司 | 第九色激情 | 亚洲精品无码久久久久 | 在线观看一区 | 乱码av | 我爱我色成人网 | 国产成人福利在线 | 在线观看日韩国产 | 性感美女一区二区三区 | 欧美色综合网站 | 无码国产精品96久久久久 | 瑟瑟久久 | 中文字幕在线观看91 | 亚洲免费一级 | 伊人涩涩 | 亚洲av成人无码一二三在线观看 | 亚洲va韩国va欧美va精品 | 奇米成人影视 | 91禁在线看| 91调教视频| 日本在线视频中文字幕 | 最新中文字幕在线观看视频 | 久久久免费精品视频 | 香港av在线 | 一本一道波多野结衣av黑人 | 精品久久久久久久久中文字幕 | 97人妻人人揉人人躁人人 | 免费在线看黄色 | 国产精品久久久久久久久夜色 | 国产激情a| 美女啪啪动态图 | 亚洲av无码乱码国产麻豆 | 中文字幕精品亚洲 | 91日韩欧美| 国产精品视频不卡 | 中文字幕无码日韩专区免费 | 大肉大捧一进一出好爽视频 | 91在线精品入口 | 18岁毛片|