为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 Go 应用程序内的 Elasticsearch 中执行嵌套聚合?

如何在 Go 应用程序内的 Elasticsearch 中执行嵌套聚合?

Go
德玛西亚99 2022-06-13 15:25:27
我正在开发一个我们用 Go 编写的应用程序,该应用程序需要随着时间的推移提取一些统计数据。我想从我们拥有的监控索引中提取一些数据,并首先按时间分组,然后按监视器在给定时间点可以返回的不同状态进行分组。例如,对于在访问特定 URL 时记录响应代码的东西,我想先按时间片获取聚合,然后汇总计数为 200、400、403 等状态代码。如何使用Elastic 包做到这一点?
查看完整描述

1 回答

?
蝴蝶刀刀

TA贡献1801条经验 获得超8个赞

这里有几件事要知道。首先,我发现通过查看包中的测试代码最容易了解包的工作原理。这就是我找到我需要的两个聚合的方式,NewAutoDateHistogramAggregation并且NewTermsAggregation.


对于嵌套聚合,您可以通过将子聚合链接到第一个聚合来实现。


我们首先创建statusAgg对象(子聚合),然后在我们根据时间设置父聚合时将其链接起来。注意将 传递statusAgg给SubAggregation链接到日期直方图聚合。


然后执行聚合,实际上只有父聚合被传递给搜索上下文,并且返回的结果嵌套了你所期望的。


statusAgg := elastic.NewTermsAggregation().Field("statuscode")

timeAgg := elastic.NewAutoDateHistogramAggregation().

    Field("@timestamp").

    SubAggregation("status", statusAgg)


result, err := es.Search().

    Index(index).

    Query(boolQuery).

    Aggregation("time", timeAgg).

    Size(0).

    Pretty(true).

    Do(ctx)


查看完整回答
反对 回复 2022-06-13
  • 1 回答
  • 0 关注
  • 220 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号