首页  >  文章  >  后端开发  >  用golang编写简单的ES avg聚合

用golang编写简单的ES avg聚合

WBOY
WBOY转载
2024-02-09 14:33:08500浏览

用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删除