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中文网其他相关文章!