大數據利器Elasticsearch之聚合搜索

這是我參與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
            }
        }
    }
}
複製代碼
相關文章
相關標籤/搜索