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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Elasticsearch聚合初探——metric篇

發(fā)布時(shí)間:2025/3/20 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Elasticsearch聚合初探——metric篇 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

2019獨(dú)角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>

Elasticsearch是一款提供檢索以及相關(guān)度排序的開源框架,同時(shí),也支持對(duì)存儲(chǔ)的文檔進(jìn)行復(fù)雜的統(tǒng)計(jì)——聚合。

前言

ES中的聚合被分為兩大類:Metric度量和bucket桶(原諒我英語差,找不到合適的詞語.....就用單詞來說吧!)。說的通俗點(diǎn),metric很像SQL中的avg、max、min等方法,而bucket就有點(diǎn)類似group by了。

本篇就簡單的介紹一下metric聚合的用法。

metric的聚合按照值的返回類型可以分為兩種:單值聚合 和 多值聚合。

單值聚合

Sum 求和

這個(gè)聚合返回的是單個(gè)值,dsl可以參考如下:

"aggs" : {"intraday_return" : { "sum" : { "field" : "change" } }}

返回的是change字段的和:

{..."aggregations": {"intraday_return": {"value": 2.18}} }

其中intraday_return是聚合的名字,同時(shí)也會(huì)作為請(qǐng)求返回的id值。另外,聚合中是支持腳本的,這里就不過多贅述了,詳細(xì)參考官方文檔即可。

Min 求最小值

{"aggs" : {"min_price" : { "min" : { "field" : "price" } }} }

Max 求最大值

{"aggs" : {"max_price" : { "max" : { "field" : "price" } }} }

avg 求平均值

{"aggs" : {"avg_grade" : { "avg" : { "field" : "grade" } }} }

cardinality 求唯一值,即不重復(fù)的字段有多少

{"aggs" : {"author_count" : {"cardinality" : {"field" : "author"}}} }

多值聚合

percentiles 求百分比

{"aggs" : {"load_time_outlier" : {"percentile_ranks" : {"field" : "load_time", "values" : [15, 30]}}} }

返回的結(jié)果包含多個(gè)值:

{..."aggregations": {"load_time_outlier": {"values" : {"15": 92,"30": 100}}} }

stats 統(tǒng)計(jì)

{"aggs" : {"grades_stats" : { "stats" : { "field" : "grade" } }} }

請(qǐng)求后會(huì)直接顯示多種聚合結(jié)果:

{..."aggregations": {"grades_stats": {"count": 6,"min": 60,"max": 98,"avg": 78.5,"sum": 471}} }

extend stats 擴(kuò)展統(tǒng)計(jì)

{"aggs" : {"grades_stats" : { "extended_stats" : { "field" : "grade" } }} }

在統(tǒng)計(jì)的基礎(chǔ)上還增加了多種復(fù)雜的統(tǒng)計(jì)信息:

{..."aggregations": {"grade_stats": {"count": 9,"min": 72,"max": 99,"avg": 86,"sum": 774,"sum_of_squares": 67028,"variance": 51.55555555555556,"std_deviation": 7.180219742846005,"std_deviation_bounds": {"upper": 100.36043948569201,"lower": 71.63956051430799}}} }

總結(jié)

上面并沒有列舉全面,比如2.0版本的ES,還支持多值的percentile Rank百分比排名,Geo Bounds地理位置信息,Scripted Metric腳本;單值的top hits等等。

  • 在性能上,ES也做了很多的優(yōu)化:比如max和min,如果對(duì)于排序的字段,那么就直接跳過了計(jì)算的步驟,直接取出目標(biāo)值即可。
  • 當(dāng)然有些聚合也是需要特定的場(chǎng)合的,比如cardinality計(jì)算唯一值是通過哈希的方式,如果字段數(shù)據(jù)規(guī)模很大,那么會(huì)消耗很多的性能。
  • 另外桶之間是可以嵌套的,比如在range聚合下嵌套了一個(gè)max聚合,那么會(huì)在range得到的每個(gè)結(jié)果組上,再次進(jìn)行max的統(tǒng)計(jì)。
  • 在聚合中支持腳本的使用,可以增加統(tǒng)計(jì)的靈活度。

很多內(nèi)容還需要在實(shí)踐中使用,才能了解它的優(yōu)勢(shì)。

轉(zhuǎn)載于:https://my.oschina.net/u/204616/blog/545171

總結(jié)

以上是生活随笔為你收集整理的Elasticsearch聚合初探——metric篇的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。