這是我參與8月更文挑戰的第5天,活動詳情查看:8月更文挑戰markdown
平均聚合亦即大白話求平均數。用於計算從聚合文檔中提取的數值的平均值。這些值能夠從文檔中的特定數字字段中提取,也能夠由提供的腳本生成。好比,咱們想求銀行全部員工的平均工資,有下面幾種方式:less
請求體:post
POST /bank/_search?size=0
{
"aggs" : {
"avg_salary" : { "avg" : { "field" : "salary" } }
}
}
複製代碼
上述聚合計算全部文檔的平均工資。聚合類型是avg
平均數,而且field
設置定義了將計算平均值的文檔的數字字段爲salary
。 返回結果:spa
{
...
"aggregations": {
"avg_salary": {
"value": 30065.89
}
}
}
複製代碼
聚合的名稱(avg_salary
)用做從返回的響應中檢索聚合結果的鍵。code
根據腳本計算平均工資
請求體:orm
POST /bank/_search?size=0
{
"aggs" : {
"avg_salary" : {
"avg" : {
"script" : {
"source" : "doc.salary.value"
}
}
}
}
}
複製代碼
這會將script
參數解釋爲inline
帶有painless
腳本語言(Elasticsearch默認腳本語言)且沒有腳本參數的腳本。
返回結果:ip
{
...
"aggregations": {
"avg_salary": {
"value": 30065.89
}
}
}
複製代碼
到年末了,這一年的銀行業績很是好,收益遠高於同行的平均水平,領導決定須要統一進行整年漲薪20%。咱們就可使用params進行傳遞參數進去使用腳原本得到新的平均工資:文檔
POST /bank/_search?size=0
{
"aggs" : {
"avg_corrected_salary" : {
"avg" : {
"field" : "salary",
"script" : {
"lang": "painless",
"source": "_value * params.increase",
"params" : {
"increase" : 1.2
}
}
}
}
}
}
複製代碼
這樣就能夠得到全體漲薪後平均工資:36079.068get
{
...
"aggregations": {
"avg_salary": {
"value": 36079.068
}
}
}
複製代碼
在處理或統計數據中,常常會遇到缺失值的問題。在Elasticsearch中,missing
參數定義應如何處理缺乏值的文檔。默認狀況下,它們將被忽略,但也可使用missing
將它們視爲具備值。能夠這樣處理缺失值(缺失工資數據的就給它分配當地最低工資標準吧:2200):it
POST /exams/_search?size=0
{
"aggs" : {
"avg_salary" : {
"avg" : {
"field" : "salary",
"missing": 2200
}
}
}
}
複製代碼