请教一个关于 ElasticSearch 查询的写法?

2019-06-10 12:20:12 +08:00
 jessun1990

需求背景

ES 版本为 1.5.2

使用 olivere/elastic 对 ES 进行查询操作。假定数据文档结构为

{
	"id": 1,
    "create_at": "2006-01-02T15:04:05Z07:00"
}

ES 中已经有一定量的数据。

需要查询:指定日期段 /全量时间段 内每天 00:00-02:00, 02:00-04:00 , 04:00-06:00 ... 22:00-24:00 的文档的平均值中的最高值。

简单的统计查询已经搞定,只有这条需求感觉无从下手。目前能检索到的类似文章:

https://elasticsearch.cn/question/893

https://blog.csdn.net/weixin_33953249/article/details/87338463

第一篇没生效,第二篇没看懂。我这里使用 Go 语言操作 ES 才两天,并且还有其他开发任务,没有做特别深入研究。

请大佬们启发和赐教。

3842 次点击
所在节点    Elasticsearch
7 条回复
ben1024
2019-06-10 13:49:20 +08:00
需要理解‘桶’,也就是做个聚合就行
996icu
2019-06-10 14:40:57 +08:00
时间分组聚合,官网有案例
Takamine
2019-06-10 16:09:10 +08:00
话说为什么要选 ES 的版本这么低。:smile:
jessun1990
2019-06-10 16:18:56 +08:00
@Takamine 公司既有的 es 服务,已经有其他服务在跑,无法升级。


@ben1024
@996icu
时间分组聚合已经有了,就是聚合到每天。但是聚合到每天的固定时间段,这个就萌圈了。
996icu
2019-06-10 16:30:47 +08:00
@jessun1990 时间区间分组聚合 dateHistogramInterval.hours(小时区间) 我只会用 JavaApi 写,DSL 不会,你可以查下 dateHistogramInterval 这个 DSL 的使用
dif
2019-06-10 16:35:01 +08:00
```json
GET indexName/indexType/_search
{
"from" : 0,
"size" : 1,
"query" : {
"bool" : {
"must" : [
{
"term" : {
"Field" : {
"value" : "value",
"boost" : 1.0
}
}
}
]
}
},
"aggregations" : {
"histogram" : {
"histogram" : {
"field" : "DATE_TIME",
"interval" : 120.0,
"offset" : 0.0
},
"aggregations" : {
"index_value" : {
"avg" : {
"field" : "AVG_FIELD_NAME"
}
}
}
}
}
}
```
jessun1990
2019-06-29 19:19:41 +08:00
抱歉现在才回复
@996icu 如果只是一个条件,求平均每日文档数,或者是求每 2 小时间隔文档数,我都回写。但是这个两个条件加起来,求平均每日 2 小时间隔的文档数,我就拙计了。

@dif 感谢壮士,但是我这里尝试走了一下,貌似没成功。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/572404

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX