Elasticsearch是一款提供檢索以及相關度排序的開源框架,同時,也支持對存儲的文檔進行復雜的統計——聚合。框架
ES中的聚合被分爲兩大類:Metric度量和bucket桶(原諒我英語差,找不到合適的詞語.....就用單詞來講吧!)。說的通俗點,metric很像SQL中的avg、max、min
等方法,而bucket就有點相似group by
了。性能
metric的聚合按照值的返回類型能夠分爲兩種:單值聚合 和 多值聚合。優化
這個聚合返回的是單個值,dsl能夠參考以下:code
"aggs" : { "intraday_return" : { "sum" : { "field" : "change" } } }
返回的是change字段的和:排序
{ ... "aggregations": { "intraday_return": { "value": 2.18 } } }
其中intraday_return是聚合的名字,同時也會做爲請求返回的id值。另外,聚合中是支持腳本的,這裏就不過多贅述了,詳細參考官方文檔便可。ip
{ "aggs" : { "min_price" : { "min" : { "field" : "price" } } } }
{ "aggs" : { "max_price" : { "max" : { "field" : "price" } } } }
{ "aggs" : { "avg_grade" : { "avg" : { "field" : "grade" } } } }
{ "aggs" : { "author_count" : { "cardinality" : { "field" : "author" } } } }
{ "aggs" : { "load_time_outlier" : { "percentile_ranks" : { "field" : "load_time", "values" : [15, 30] } } } }
返回的結果包含多個值:文檔
{ ... "aggregations": { "load_time_outlier": { "values" : { "15": 92, "30": 100 } } } }
{ "aggs" : { "grades_stats" : { "stats" : { "field" : "grade" } } } }
請求後會直接顯示多種聚合結果:it
{ ... "aggregations": { "grades_stats": { "count": 6, "min": 60, "max": 98, "avg": 78.5, "sum": 471 } } }
{ "aggs" : { "grades_stats" : { "extended_stats" : { "field" : "grade" } } } }
在統計的基礎上還增長了多種複雜的統計信息:io
{ ... "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 } } } }
上面並無列舉全面,好比2.0版本的ES,還支持多值的percentile Rank百分比排名,Geo Bounds地理位置信息,Scripted Metric腳本;單值的top hits等等。ast
不少內容還須要在實踐中使用,才能瞭解它的優點。