首頁  >  文章  >  後端開發  >  用golang寫簡單的ES avg聚合

用golang寫簡單的ES avg聚合

WBOY
WBOY轉載
2024-02-09 14:33:08502瀏覽

用golang编写简单的ES avg聚合

php小編小新今天為大家帶來了一篇關於使用Golang寫簡單的ES avg聚合的文章。 ES(Elasticsearch)是一個開源的分散式搜尋和分析引擎,它提供了豐富的聚合功能,其中包括avg(平均值)聚合。本文將介紹如何使用Golang寫一個簡單的ES avg聚合程序,幫助大家更能理解並應用ES的聚合功能。讓我們一起來了解一下吧!

問題內容

我一直在嘗試在 go 中寫一個簡單的 es avg 聚合,但即使這聽起來我不知道如何解析結果:

ctx, cancel := context.WithTimeout(context.Background(), defaultTimeout)
     defer cancel()
     query := elastic.NewAvgAggregation().Field("Assignment.HomeworkSize")
     ss := elastic.NewSearchSource().Query(query)
     searchResult, err := c.ES.Search().Index(StudentIndex).SearchSource(ss).Do(ctx)
     if err != nil {
         return 0, err
     }
     // Parse Results
     aggs := searchResult.Aggregations

但我不確定如何解析 searchresult 來取得此聚合的結果。基本上我想解析代表學生的大量文件並取得作業的平均大小。

解決方法

我通常使用 http 來存取彈性。因此,我將結果作為地圖返回,並且可以使用調試器檢查您的結果是什麼並從那裡開始工作。

var resp map[string]interface{}
err := c.handlerequest(http.methodget, tag, req, &resp)

其中 tag 是您的索引,req - 您對彈性執行的請求,response 是回應

內部處理程序看起來像這樣:

req, err := http.newrequest(method, c.endpoint tag, bytes.newreader(jsonbody))

#其中 jsonbody 是您傳遞給處理程序的請求 其他一切都是用 go 發送 http 的常用方式

還要記住的一件事是在結果映射中處理類型(類型斷言),如下所示:

for index, hit := range resp["hits"].(map[string]interface{})["hits"].([]interface{}) {

        Source := hit.(map[string]interface{})["_source"].(map[string]interface{})

        items[index] = someType{
            SomeField: Source["app_name"].(string),
        }
    }

以上是用golang寫簡單的ES avg聚合的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:stackoverflow.com。如有侵權,請聯絡admin@php.cn刪除