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),
}
}