在弹性搜索(6.7)日期直方图中指定桶键从指定值开始
Specify bucket key to start from specified value in elastic search(6.7) date histogram
我在弹性搜索中有一个存储系统警报的索引。该索引具有 alert.I 的 startTime 和 endTime 等值,需要获取日期直方图,该直方图指定指定时间间隔内出现的警报 minutely/hourly 次。
为了获取,我使用了以下查询:
GET ocm_alert/_search
{
"size": 0,
"query": {
"bool": {
"filter": [
{
"range": {
"endTime": {
"from": 1561393800000,
"to": null,
"include_lower": true,
"include_upper": true,
"boost": 1
}
}
},
{
"range": {
"startTime": {
"from": null,
"to": 1562828606000,
"include_lower": true,
"include_upper": false,
"boost": 1
}
}
}
],
"adjust_pure_negative": true,
"boost": 1
}
},
"aggregations": {
"aggs_by_time": {
"date_histogram": {
"script": {
"source": "long startTime = doc['startTime'].value.toInstant().toEpochMilli(); long endTime = doc['endTime'].value.toInstant().toEpochMilli(); List dates = new ArrayList(); long rangeFrom = startTime < 1561116600000l ? 1561116600000l : startTime; long rangeTo = endTime > 1562828606000l ? 1562828606000l : endTime; for(long date = rangeFrom; date < rangeTo ; date+=3600000){dates.add(date)} dates.add(rangeTo);return dates;",
"lang": "painless"
},
"interval": "1h",
"offset": 0,
"order": {
"_key": "asc"
},
"keyed": false,
"min_doc_count": 1
},
"aggregations": {
"aggs_by_severity": {
"min": {
"field": "severity"
}
}
}
}
}
}
结果很好,但结果中的键是使用我在脚本中计算的日期字段计算的。例如,如果警报开始时间为 12:15:00,则密钥计算为 11:30:00,第二个密钥为 12:30:00。但是我需要根据我在 12:00:00 等查询中指定的 startTime 来启动键值。这样聚合键就是 12:00:00 , 13:00:00.
我想有点乱七八糟,或者这就是应该如何完成的。我根据我在查询子句中指定的 startTime 计算了偏移值,并将偏移量与时区一起添加到日期直方图聚合中,它起作用了。
我在弹性搜索中有一个存储系统警报的索引。该索引具有 alert.I 的 startTime 和 endTime 等值,需要获取日期直方图,该直方图指定指定时间间隔内出现的警报 minutely/hourly 次。 为了获取,我使用了以下查询:
GET ocm_alert/_search
{
"size": 0,
"query": {
"bool": {
"filter": [
{
"range": {
"endTime": {
"from": 1561393800000,
"to": null,
"include_lower": true,
"include_upper": true,
"boost": 1
}
}
},
{
"range": {
"startTime": {
"from": null,
"to": 1562828606000,
"include_lower": true,
"include_upper": false,
"boost": 1
}
}
}
],
"adjust_pure_negative": true,
"boost": 1
}
},
"aggregations": {
"aggs_by_time": {
"date_histogram": {
"script": {
"source": "long startTime = doc['startTime'].value.toInstant().toEpochMilli(); long endTime = doc['endTime'].value.toInstant().toEpochMilli(); List dates = new ArrayList(); long rangeFrom = startTime < 1561116600000l ? 1561116600000l : startTime; long rangeTo = endTime > 1562828606000l ? 1562828606000l : endTime; for(long date = rangeFrom; date < rangeTo ; date+=3600000){dates.add(date)} dates.add(rangeTo);return dates;",
"lang": "painless"
},
"interval": "1h",
"offset": 0,
"order": {
"_key": "asc"
},
"keyed": false,
"min_doc_count": 1
},
"aggregations": {
"aggs_by_severity": {
"min": {
"field": "severity"
}
}
}
}
}
}
结果很好,但结果中的键是使用我在脚本中计算的日期字段计算的。例如,如果警报开始时间为 12:15:00,则密钥计算为 11:30:00,第二个密钥为 12:30:00。但是我需要根据我在 12:00:00 等查询中指定的 startTime 来启动键值。这样聚合键就是 12:00:00 , 13:00:00.
我想有点乱七八糟,或者这就是应该如何完成的。我根据我在查询子句中指定的 startTime 计算了偏移值,并将偏移量与时区一起添加到日期直方图聚合中,它起作用了。