elasticsearch api中的Buckets(桶)及Metrics(指标)
和查詢DSL一樣,聚合(Aggregations)也擁有一種可組合(Composable)的語法:獨立的功能單元可以被混合在一起來滿足你的需求。這意味著需要學習的基本概念雖然不多,但是它們的組合方式是幾近無窮的。
為了掌握聚合,你只需要了解兩個主要概念:
Buckets(桶):
滿足某個條件的文檔集合。
Metrics(指標):
為某個桶中的文檔計算得到的統計信息。
就是這樣!每個聚合只是簡單地由一個或者多個桶,零個或者多個指標組合而成。可以將它粗略地轉換為SQL:
SELECT COUNT(color) FROM table GROUP BY color以上的COUNT(color)就相當于一個指標。GROUP BY color則相當于一個桶。
桶和SQL中的組(Grouping)擁有相似的概念,而指標則與COUNT(),SUM(),MAX()等相似。
讓我們仔細看看這些概念。
桶(Buckets)
一個桶就是滿足特定條件的一個文檔集合:
- 一名員工要么屬于男性桶,或者女性桶。
- 城市Albany屬于New York州這個桶。
- 日期2014-10-28屬于十月份這個桶。
隨著聚合被執行,每份文檔中的值會被計算來決定它們是否匹配了桶的條件。如果匹配成功,那么該文檔會被置入該桶中,同時聚合會繼續執行。
桶也能夠嵌套在其它桶中,能讓你完成層次或者條件劃分這些需求。比如,Cincinnati可以被放置在Ohio州這個桶中,而整個Ohio州則能夠被放置在美國這個桶中。
ES中有很多類型的桶,讓你可以將文檔通過多種方式進行劃分(按小時,按最流行的詞條,按年齡區間,按地理位置,以及更多)。但是從根本上,它們都根據相同的原理運作:按照條件對文檔進行劃分。
指標(Metrics)
桶能夠讓我們對文檔進行有意義的劃分,但是最終我們還是需要對每個桶中的文檔進行某種指標計算。分桶是達到最終目的的手段:提供了對文檔進行劃分的方法,從而讓你能夠計算需要的指標。
多數指標僅僅是簡單的數學運算(比如,min,mean,max以及sum),它們使用文檔中的值進行計算。在實際應用中,指標能夠讓你計算例如平均薪資,最高出售價格,或者百分之95的查詢延遲。
將兩者結合起來
一個聚合就是一些桶和指標的組合。一個聚合可以只有一個桶,或者一個指標,或者每樣一個。在桶中甚至可以有多個嵌套的桶。比如,我們可以將文檔按照其所屬國家進行分桶,然后對每個桶計算其平均薪資(一個指標)。
因為桶是可以嵌套的,我們能夠實現一個更加復雜的聚合操作:
此時,就能夠得到每個<國家,性別,年齡>組合的平均薪資信息了。它可以通過一個請求,一次數據遍歷來完成!
總結
以上是生活随笔為你收集整理的elasticsearch api中的Buckets(桶)及Metrics(指标)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: elasticsearch api中的B
- 下一篇: Elasticsearch 字段数据类型