31、聚合分析的平均值、最大值、數(shù)量、求和、histogram以及date histogram實戰(zhàn)

主要內(nèi)容:聚合分析的平均值、最大值、數(shù)量、求和、histogram以及date histogram實戰(zhàn)

1、_bucket嵌套實現(xiàn)多層下鉆分析

1.1、avg求平均值

比如說:

紅色電視中的3臺長虹的平均價格是多少?
紅色電視中的1臺小米的平均價格是多少?

下鉆的意思是,已經(jīng)分了一個組了,比如說顏色的分組,然后還要繼續(xù)對這個分組內(nèi)的數(shù)據(jù),再分組,比如一個顏色內(nèi),還可以分成多個不同的品牌的組,最后對每個最小粒度的分組執(zhí)行聚合分析操作,這就叫做下鉆分析

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

bucket,分組操作,histogram,按照某個值指定的interval,劃分一個一個的bucket

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

GET /tvs/_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"
              }
            }
          }
        }
      }
    }
  }
}
1.2、max,min,count,sum

count:bucket,terms,自動就會有一個doc_count,就相當于是count
max:求一個bucket內(nèi),指定field值最大的那個數(shù)據(jù)
min:求一個bucket內(nèi),指定field值最小的那個數(shù)據(jù)
sum:求一個bucket內(nèi),指定field值的總和
求總和,就可以拿到一個顏色下的所有電視的銷售總額

GET /tvs/_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"
          }
        }
      }
    }
  }
}
1.3、histogram分組操作

histogram:類似于terms,也是進行bucket分組操作,接收一個field,按照這個field的值的各個范圍區(qū)間,進行bucket分組操作

"histogram":{ 
  "field": "price",
  "interval": 2000
},

interval:2000,劃分范圍,02000,20004000,40006000,60008000,8000~10000,buckets

去根據(jù)price的值,比如2500,看落在哪個區(qū)間內(nèi),比如20004000,此時就會將這條數(shù)據(jù)放入20004000對應的那個bucket中

bucket有了之后,一樣的,去對每個bucket執(zhí)行avg,count,sum,max,min,等各種metric操作,聚合分析

GET /tvs/_search
{
  "size": 0,
  "aggs": {
    "price": {
      "histogram": {
        "field": "price",
        "interval": 2000
      },
      "aggs": {
        "revenue": {
          "sum": {
            "field": "price"
          }
        }
      }
    }
  }
}
1.4、date histogram

date histogram:按照我們指定的某個date類型的日期field,以及日期interval,按照一定的日期間隔,去劃分bucket

date interval = 1m,

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

然后會去掃描每個數(shù)據(jù)的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中,一條數(shù)據(jù)都沒有,那么這個區(qū)間也是要返回的,不然默認是會過濾掉這個區(qū)間的
extended_bounds,min,max:劃分bucket的時候,會限定在這個起始日期,和截止日期內(nèi)

[fixed_interval] or [calendar_interval]

GET /tvs/_search
{
   "size" : 0,
   "aggs": {
      "sales": {
         "date_histogram": {
            "field": "sold_date",
            "calendar_interval": "month",
            "format": "yyyy-MM-dd",
            "min_doc_count" : 0, 
            "extended_bounds" : { 
                "min" : "2016-01-01",
                "max" : "2017-12-31"
            }
         }
      }
   }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內(nèi)容