中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Elasticsearch聚合的方法怎么用

發布時間:2022-04-19 16:43:12 來源:億速云 閱讀:216 作者:iii 欄目:移動開發

本篇內容介紹了“Elasticsearch聚合的方法怎么用”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

一、前言

聚合是一種基于搜索的數據匯總,通過組合可以完成復雜的操作。聚合可以對文檔進行匯總、分組等。通過聚合,我們會得到一個數據的概覽,是分析和總結一律的數據,而不是尋覓單個文檔。

二、分類

  • Bucket Aggregation:少量列滿足特定條件的文檔的集合,相似MySQL的“group by”

  • Metric Aggregation:少量數學運算,可以對文檔字段進行統計分析,比方max、min、sum等。

  • Pipeline Aggregation:對其余的聚合結果進行二次聚合

  • Matrix Aggregation:支持對多個字段的操作并提供一個結果矩陣,7.x版本合并到Metric Aggregation中了。

三、聚合結構

{    "size": 0,     ["query": {}, ]?    "aggs" : {        "${my_name}" : {            "${aggregation_type}" : {                <aggregation_body>            }            [,"meta" : {  [<meta_data_body>] } ]?            [,"aggs" : { [<sub_aggregation>]+ } ]?        }        [,"${my_name}" : { ... } ]*    }}
  • 聚合可以進行嵌套,比方上面的“aggs”內部又嵌套了一個“aggs”

  • “aggs”是簡寫,也可以寫完整“aggregations”

  • 最上面的“size”一般設置為0,聚合操作用于統計數據,無需輸出文檔

  • query 查詢,可選

  • my_name 自己設置名字

四、測試數據

使用kibana導入“kibana_sample_data_flights”,這個是飛機的航班信息,有地區、價格、天氣等信息。

操作路徑:Home --> 增加數據 --> 樣例數據 --> Sample flight data

五、Bucket Aggregation

1、子聚合

根據目的地(DestCountry)進行分組,查看航班的數量

GET kibana_sample_data_flights/_search{  "size": 0,  "aggs": {    "dest_count": {      "terms": {        "field": "DestCountry"      }    }  }}

2、數字區間分組

根據價格區間進行分組,比方0到100元多少個,100到200元多少個

GET kibana_sample_data_flights/_search{  "size": 0,  "aggs": {    "price_stat": {     // 自己設置名字      "histogram": {        "field": "AvgTicketPrice",        "interval": 100     // 指定區間      }    }  }}

輸出的結果中,key為“100.0”代表0到100.0的數據,計算公式如下

bucket_key = Math.floor(value / interval) * interval

3、日期區間分組

GET kibana_sample_data_flights/_search{  "size": 0,  "aggs": {    "price_stat": {      "date_histogram": {        "field": "timestamp",        "calendar_interval": "month"      }    }  }}

注意:日期間隔設置,7.x版本用“calendar_interval”,老版本用“interval”。

支持的時間間隔表達式

  • 分鐘:minute, 1m

  • 小時:hour, 1h

  • 天:day, 1d

  • 星期:week, 1w

  • 月:month, 1M

  • 季度:quarter, 1q

  • 年:year, 1y

六、Metric Aggregation

計算度量這類的聚合操作是以使用一種方式或者者從文檔中提取需要聚合的值為基礎的。這些數據不但可以從文檔(使用數據屬性)的屬性中提取出來,也可以使用腳本生成。

支持max、min、count、sum、avg、stats(各種統計信息)、cardinality(去重后數量)、percentiles(百分位)、geo_bounds(地理邊界)

1、最值

輸出航班的最大價格,最小價格

GET kibana_sample_data_flights/_search{  "size": 0,  "aggs": {    "max_price": {      "max": {        "field": "AvgTicketPrice"      }    },    "mix_price": {      "min": {        "field": "AvgTicketPrice"      }    }  }}

2、嵌套操作

輸出各個目的地航班的最大價格,最小價格

GET kibana_sample_data_flights/_search{  "size": 0,   "aggs": {    "dest_count":{      "terms": {        "field": "DestCountry"      },      "aggs": {        "max_price": {          "max": {            "field": "AvgTicketPrice"          }        },        "min_price": {          "min": {            "field": "AvgTicketPrice"          }        }      }    }  }}

3、stats

一次性輸出各種統計結果,包括count、min、max、sum、avg

GET kibana_sample_data_flights/_search{  "size": 0,   "aggs": {    "my_stats":{      "stats": {        "field": "AvgTicketPrice"      }    }  }}

4、cardinality

去重后數量統計

GET kibana_sample_data_flights/_search{  "size": 0,   "aggs": {    "my_cardinality":{      "cardinality": {        "field": "DestCountry"      }    }  }}

5、top_hits

top_hits 操作,最開頭的幾個文檔。
獲取去每個國家的航班的最小價格,下面的“"size": 5”代表獲取5個國家的航班,“"size": 2”代表最低的2個價格。

GET kibana_sample_data_flights/_search{  "size": 0,  "aggs": {    "my_count": {      "terms": {        "field": "DestCountry",        "size": 5      },      "aggs": {        "my_min_price": {          "top_hits": {            "size": 2,            "sort": [              {                "AvgTicketPrice": {                  "order": "asc"                }              }            ]          }        }      }    }  }}

6、ranges 自己設置范圍分組

比方下面,小于200一個分組,200到500一個分組,大于500個分組,可以指定輸出的key。

GET kibana_sample_data_flights/_search{  "size": 0,  "aggs": {    "my_price_range":{      "range": {        "field": "AvgTicketPrice",        "ranges": [          {            "to": 200          },          {            "from": 200,            "to": 500          },          {            "key": ">500",             "from": 500          }        ]      }    }  }}

7、百分位聚合

百分位聚合,可以利用百分位聚合的結果評估數據分布,判斷數據能否扭曲,判斷數據能否雙峰分布等。壓測的時候經常使用,比方95百分位對應的值表示這個值大于95%的所有值。假設結果是“10%:12ms ,..., 70%:55ms, 99%:100ms”,說明通常情況下(70%),網頁的響應時間在12ms~55ms,99%的網頁在100ms內加載完成。

GET kibana_sample_data_flights/_search{  "size": 0,   "aggs": {    "my_price_percentiles":{      "percentiles": {        "field": "AvgTicketPrice",        "percents": [          1,          5,          25,          50,          75,          95,          99        ]      }    }  }}

8、地理邊界聚合

GET kibana_sample_data_flights/_search{  "size": 0,  "aggs": {    "my_geo_bounds": {      "geo_bounds": {        "field": "DestLocation",        "wrap_longitude": true      }    }  }}

9、優化 Terms 聚合的性能

設置 eager_global_ordinals 為true,會在內存中預先加載這些數據。

七、Pipeline Aggregation

對聚合分析的結果再次做聚合分析。

分兩類

  • Sibling:結果和現有分析結果同級。有min_bucket、max_bucket、avg_bucket、sum_bucket、stats_bucket、percentiles_bucket

  • Parent:結果內嵌到現有的聚合分析結果之中。有derivative(差值,與前一個的差值,用于看趨勢)、cumulative_sum(累計求和)、moving_avg(移動平均,數據在一個固定大小窗口里的平均值)

說明,bucket_path參數,指定路徑,假如是二級路徑,注意有一個“>”。

1、Sibling的例子

根據不同的目的地獲取平均票據,并對這些平均票價做分析。
注意,my_distancemy_avg_pricemy_result這三個是自己設置的變量名,buckets_path指定路徑。

GET kibana_sample_data_flights/_search{  "size": 0,  "aggs": {    "my_distance": {      "terms": {        "field": "DestCountry"      },      "aggs": {        "my_avg_price": {          "avg": {            "field": "AvgTicketPrice"          }        }      }    },    "my_result": {      "stats_bucket": {        "buckets_path": "my_distance>my_avg_price"      }    }  }}

2、Parent的例子

統計每50km的平均票價,并查看其波動

GET kibana_sample_data_flights/_search{  "size": 0,  "aggs": {    "my_distance": {      "histogram": {        "field": "DistanceKilometers",        "interval": 50      },      "aggs": {        "my_avg_price": {          "avg": {            "field": "AvgTicketPrice"          }        },        "my_result": {          "derivative": {            "buckets_path": "my_avg_price"          }        }      }    }  }}

八、排序

根據數量(_count)進行排序,數量相同根據返回的key進行排序

GET kibana_sample_data_flights/_search{  "size": 0,  "aggs": {    "dest_count": {      "terms": {        "field": "DestCountry",        "order": [          {            "_count": "asc"          },          {            "_key": "desc"          }        ]      }    }  }}

根據最終返回的結果進行排序,比方下面的my_stats

GET kibana_sample_data_flights/_search{  "size": 0,  "aggs": {    "my_distance": {      "terms": {        "field": "DestCountry",        "order": {          "my_stats.min": "asc"        }      },      "aggs": {        "my_stats": {          "stats": {            "field": "AvgTicketPrice"          }        }      }    }  }}

九、聚合分析的原理及精準度問題

Elasticsearch聚合的方法怎么用

聚合分析

Terms 聚合分析不準的起因,數據分散在多個分片上,Coordinating Node 無法獲取數據全貌。

打開 show_term_doc_count_error,可以多看到兩個返回值。

  • doc_count_error_upper_bound:被遺漏的term 分桶,包含的文檔,有可能的最大值

  • sum_other_doc_count:除了返回結果 bucket的 terms 以外,其余 terms 的文檔總數(總數-返回的總數)

Elasticsearch聚合的方法怎么用

Trems 不正確的案例

那么如何處理呢?

  • 處理方案 1:當數據量不大時,設置 Primary Shard 為 1;實現精確性。

  • 處理方案 2:在分布式數據上,設置 shard_size 參數,提高準確度。原理:每次從 Shard 上額外多獲取數據,提升精確率,但會降低響應時間。

shard_size 的默認大小 “shard_size = size * 1.5 * 10”,可以根據自己的需要進行設置。

“Elasticsearch聚合的方法怎么用”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

琼海市| 双鸭山市| 淳安县| 洪洞县| 松潘县| 大宁县| 八宿县| 沧州市| 建始县| 巴林左旗| 格尔木市| 苍南县| 阳朔县| 博野县| 郎溪县| 甘泉县| 大渡口区| 夏津县| 小金县| 腾冲县| 东乌珠穆沁旗| 嘉峪关市| 宿松县| 尖扎县| 白沙| 米易县| 潼南县| 勐海县| 中江县| 桐柏县| 永顺县| 神农架林区| 衡阳市| 汕头市| 兰州市| 靖州| 遂平县| 黔南| 恭城| 兴化市| 镇康县|