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中文網其他相關文章!