Elasticsearch 日期直方图
Elasticsearch date histogram
我在 @timestamp
字段上使用 elasticsearch 日期直方图聚合。这是查询的一部分:
'stats': {
'date_histogram': {
'field': '@timestamp',
'interval': '1h',
'format': 'yyyy-MM-dd H:m:s'
}
}
和 @timestamp
的映射:
"@timestamp": {
"type": "date"
}
我的时间间隔是1h
。但我还需要从时间戳中提取分钟信息而不对 1m
执行聚合。我试图指定密钥的字符串表示形式的格式。我得到以下输出:
'key_as_string': '2020-11-07 10:0:0'
'key': 1604743200000
有没有办法在聚合结果中包含分钟数?在 key
或 key_as_string
中?
一个在 es 中索引的 @timestamp
示例:
'@timestamp': '2020-12-09T13:50:46.056000Z'
直方图值 rounded down 到最接近的桶,遵循公式
bucket_key = Math.floor(value / interval) * interval
尽管如果您在任何给定的存储桶中有精确的 one 值,显示确切的分钟数似乎很有用,但直方图通常 aggregate a一堆值,因此当我们以小时为间隔时,谈论基于分钟的存储桶键并没有真正意义。
话虽如此,日期直方图确实接受子聚合,因此如果您想以所需格式检索 个人文档的 @timestamps
,您可以利用 top_hits
聚合 script_fields
:
{
"size": 0,
"aggs": {
"stats": {
"date_histogram": {
"field": "@timestamp",
"interval": "1h",
"format": "yyyy-MM-dd H:m:s"
},
"aggs": {
"concrete_values": {
"top_hits": {
"script_fields": {
"ts_with_minutes": {
"script": {
"source": "LocalDateTime.ofInstant(Instant.ofEpochMilli(doc['@timestamp'].value.millis), ZoneId.of('UTC')).format(DateTimeFormatter.ofPattern('yyyy-MM-dd H:m:s'))"
}
}
},
"size": 10
}
}
}
}
}
}
或者,您可能也对最常出现的时间戳感兴趣,按 分钟 分组(format
中省略了秒):
{
"size": 0,
"aggs": {
"stats": {
"date_histogram": {
"field": "@timestamp",
"interval": "1h",
"format": "yyyy-MM-dd H:m:s"
},
"aggs": {
"most_represented_timestamps": {
"terms": {
"field": "@timestamp",
"format": "yyyy-MM-dd H:m",
"size": 10
}
}
}
}
}
}
我在 @timestamp
字段上使用 elasticsearch 日期直方图聚合。这是查询的一部分:
'stats': {
'date_histogram': {
'field': '@timestamp',
'interval': '1h',
'format': 'yyyy-MM-dd H:m:s'
}
}
和 @timestamp
的映射:
"@timestamp": {
"type": "date"
}
我的时间间隔是1h
。但我还需要从时间戳中提取分钟信息而不对 1m
执行聚合。我试图指定密钥的字符串表示形式的格式。我得到以下输出:
'key_as_string': '2020-11-07 10:0:0'
'key': 1604743200000
有没有办法在聚合结果中包含分钟数?在 key
或 key_as_string
中?
一个在 es 中索引的 @timestamp
示例:
'@timestamp': '2020-12-09T13:50:46.056000Z'
直方图值 rounded down 到最接近的桶,遵循公式
bucket_key = Math.floor(value / interval) * interval
尽管如果您在任何给定的存储桶中有精确的 one 值,显示确切的分钟数似乎很有用,但直方图通常 aggregate a一堆值,因此当我们以小时为间隔时,谈论基于分钟的存储桶键并没有真正意义。
话虽如此,日期直方图确实接受子聚合,因此如果您想以所需格式检索 个人文档的 @timestamps
,您可以利用 top_hits
聚合 script_fields
:
{
"size": 0,
"aggs": {
"stats": {
"date_histogram": {
"field": "@timestamp",
"interval": "1h",
"format": "yyyy-MM-dd H:m:s"
},
"aggs": {
"concrete_values": {
"top_hits": {
"script_fields": {
"ts_with_minutes": {
"script": {
"source": "LocalDateTime.ofInstant(Instant.ofEpochMilli(doc['@timestamp'].value.millis), ZoneId.of('UTC')).format(DateTimeFormatter.ofPattern('yyyy-MM-dd H:m:s'))"
}
}
},
"size": 10
}
}
}
}
}
}
或者,您可能也对最常出现的时间戳感兴趣,按 分钟 分组(format
中省略了秒):
{
"size": 0,
"aggs": {
"stats": {
"date_histogram": {
"field": "@timestamp",
"interval": "1h",
"format": "yyyy-MM-dd H:m:s"
},
"aggs": {
"most_represented_timestamps": {
"terms": {
"field": "@timestamp",
"format": "yyyy-MM-dd H:m",
"size": 10
}
}
}
}
}
}