Percentile Ranks Aggregation
Percentile Ranks Aggregation
一個multi-value指標聚合,它通過從聚合文檔中提取數值來計算一個或多個百分比。這些值可以從特定數值字段中提取,也可以由提供的腳本生成。
註意:請參考百分比(通常)近視值(percentiles are (usually approximate))和壓縮(Compression)以獲得關於近視值的建議和內存使用的百分比排位聚合。
百分比排位展示那些在某一值之下的觀測值的百分比。例如,假如某一直大於等於被觀測值的95%,則稱其為第95百分位數。
假設你的數據由網頁加載時間組成。你可能有一個服務協議,95%頁面需要在15ms加載完全,99%頁面在30ms加載完全。
讓我們看一下代表加載時間的百分位數:
{ "aggs" : { "load_time_outlier" : { "percentile_ranks" : { "field" : "load_time", 【1】 "values" : [15, 30] } } } }
【1】load_time必須是一個數值字段
應答看起來像這個樣子:
{ ... "aggregations": { "load_time_outlier": { "values" : { "15": 92, "30": 100 } } } }
從這些信息你可以確定,你已經達到了99%的加載時間目標,但沒有達到95%的加載時間目標。
Script
百分位數度量支持腳本。例如,假如加載時間是在毫秒級,當我們想指定值在秒級,我們可以使用腳本來實時轉化它們:
{ "aggs" : { "load_time_outlier" : { "percentile_ranks" : { "values" : [3, 5], "script" : { "lang": "painless", "inline": "doc[‘load_time‘].value / params.timeUnit", 【1】 "params" : { "timeUnit" : 1000 【2】 } } } } } }
【1】field參數被一個script參數替代,使用腳本生成計算百分位數的值。
【2】腳本支持參數化輸入,就像其它任何腳本一樣
通過painless腳本語言和無腳本參數將script參數翻譯為一個inline腳本。要使用文件腳本,使用以下語法:
{ "aggs" : { "load_time_outlier" : { "percentile_ranks" : { "values" : [3, 5], "script" : { "file": "my_script", "params" : { "timeUnit" : 1000 } } } } } }
TIP:索引腳本通過id參數替代file參數
HDR Histogram
警告:該功能是實驗性的,並且在將來的版本中可能被修改或者完全移除。Elastic采用最大努力來解決任何問題,但是試驗功能不受SLA官方GA功能的支持。
HDR Histogram(高動態範圍柱狀圖)是一種替代實現,在計算延遲測量的百分比數量級時可能很有用,因為它比t-digest實現更快,同時占用更大的內存空間。該實現維持固定的較差的百分比錯誤(指定為有效數字的數量)。這意味著如果在柱狀圖中設置3位有效數字的數據被記錄在1微妙至1小時(3600,000,000微妙)之間,它將保持從1微妙值增加到為最大跟蹤值(1小時)保留1毫秒和3.6分鐘(或更好)分辨率。
HDR Histogram可以通過在request中指定method參數來使用:
{ "aggs" : { "load_time_outlier" : { "percentile_ranks" : { "field" : "load_time", "values" : [15, 30], "hdr": { 【1】 "number_of_significant_value_digits" : 3 【2】 } } } } }
【1】hdr對象表示應該使用HRD Histogram來計算百分位數,並且可以在對象內部指定該算法的具體設置。
【2】number_of_significant_value_digits表示以有效數字值表示柱狀圖的分辨率。
HDR Histogram僅僅支持絕對值,假如傳遞的是一個相對值則將錯誤。假如值範圍不知道,使用HDR Histogram也不是一個好的主意,因為它將導致高內存使用。
Missing value
missing參數定義該如何處理缺省值的文檔。默認情況下,他們將被忽略,但是假如他們已經有一個值了,它也可能被處理。
{ "aggs" : { "grade_ranks" : { "percentile_ranks" : { "field" : "grade", "missing": 10 【1】 } } } }
【1】在grade字段中沒有值的文檔將和有值10的文檔放入相同的bucket中。
原文地址:https://www.elastic.co/guide/en/elasticsearch/reference/5.0/search-aggregations-metrics-percentile-rank-aggregation.html
Percentile Ranks Aggregation