弹性如何在不同的日子汇总小时数
Elastic how to aggregate hour on different days
我想汇总具有不同日期的文档的数据,例如仅在星期四从 12 点到 18 点。
我的包含聚合的查询如下所示:
{
"query": {
"bool": {
"must": [
{
"match": {
"locationid.raw": "HH-44-6"
}
},
{
"match": {
"day.keyword": "THURSDAY"
}
},
{
"range": {
"dataHour": {
"from": "12",
"to": "18",
"include_lower": true,
"include_upper": true
}
}
},
{
"range": {
"dataDate": {
"gte": "2018-11-08 12:00",
"include_lower": true
}
}
}
]
}
},
"aggs" : {
"contacts" : {
"date_histogram" : {
"field" : "dataDate",
"interval" : "hour"
},
"aggs": {
"seeing_data": {
"avg": {
"field": "seeing"
}
}
}
}
}
响应很大,因为它为聚合提供了从“2018-11-08 18:00”开始日期到现在之间的每一天和每一小时的时间间隔内的数据,而不是仅提供三个可用数据天(因为从2018-11-08到现在只有三个星期四)。
如何实现只聚合 12-18 小时范围内的数据,并且只聚合从 2018-11-08 开始的星期四 12:00?
您可以使用脚本过滤器
"script": {
"script": "doc['@timestamp'].date.dayOfWeek == 2"
}
通过这些步骤能够按一天中的几个小时汇总您的数据:
所以您的文档中有一个日期字段。你不能从那个提取时间。所以你必须在 Kibana 中创建一个自定义字段。
- 转到 "Management" 部分
- 转到"Index patterns"
- 转到"Create index pattern"
- 选择你的collection
- 转到 "Script fields" 选项卡
- 点击"Add scripted field"
现在我们将添加 hour
字段:
- 在 "name" 字段中,输入 "hour"。
- 设置类型为"number"。
- 并在 "script" 字段中输入:
doc['myDateField'].date.hourOfDay
,其中 myDateField
是包含文档日期的字段。
就是它!您现在可以在“发现”或“可视化”部分找到您的新字段。
在此处查找更多类型的聚合(例如,date.dayOfWeek
):
我想汇总具有不同日期的文档的数据,例如仅在星期四从 12 点到 18 点。
我的包含聚合的查询如下所示:
{
"query": {
"bool": {
"must": [
{
"match": {
"locationid.raw": "HH-44-6"
}
},
{
"match": {
"day.keyword": "THURSDAY"
}
},
{
"range": {
"dataHour": {
"from": "12",
"to": "18",
"include_lower": true,
"include_upper": true
}
}
},
{
"range": {
"dataDate": {
"gte": "2018-11-08 12:00",
"include_lower": true
}
}
}
]
}
},
"aggs" : {
"contacts" : {
"date_histogram" : {
"field" : "dataDate",
"interval" : "hour"
},
"aggs": {
"seeing_data": {
"avg": {
"field": "seeing"
}
}
}
}
}
响应很大,因为它为聚合提供了从“2018-11-08 18:00”开始日期到现在之间的每一天和每一小时的时间间隔内的数据,而不是仅提供三个可用数据天(因为从2018-11-08到现在只有三个星期四)。
如何实现只聚合 12-18 小时范围内的数据,并且只聚合从 2018-11-08 开始的星期四 12:00?
您可以使用脚本过滤器
"script": {
"script": "doc['@timestamp'].date.dayOfWeek == 2"
}
通过这些步骤能够按一天中的几个小时汇总您的数据:
所以您的文档中有一个日期字段。你不能从那个提取时间。所以你必须在 Kibana 中创建一个自定义字段。
- 转到 "Management" 部分
- 转到"Index patterns"
- 转到"Create index pattern"
- 选择你的collection
- 转到 "Script fields" 选项卡
- 点击"Add scripted field"
现在我们将添加 hour
字段:
- 在 "name" 字段中,输入 "hour"。
- 设置类型为"number"。
- 并在 "script" 字段中输入:
doc['myDateField'].date.hourOfDay
,其中myDateField
是包含文档日期的字段。
就是它!您现在可以在“发现”或“可视化”部分找到您的新字段。
在此处查找更多类型的聚合(例如,date.dayOfWeek
):