2

假设我在 ElasticSearch 上有以下数据:

@timestamp; userId; currentPoints
August 7th 2017, 00:30:37.319; myUserName; 4
August 7th 2017, 00:43:22.121; myUserName; 10
August 7th 2017, 00:54:29.177; myUserName; 7
August 7th 2017, 01:10:29.352; myUserName; 4
August 7th 2017, 00:32:37.319; myOtherUserName; 12
August 7th 2017, 00:44:22.121; myOtherUserName; 17
August 7th 2017, 00:56:29.177; myOtherUserName; 8
August 7th 2017, 01:18:29.352; myOtherUserName; 11

我正在寻找一个日期直方图,它将向我显示每小时每个用户名的所有 max:currentPoints 的总和,这将生成以下数据来绘制:

August 7th 2017, 00; SumOfMaxCurrentPoints -> 27 (max from hour 00h from both users 10 + 17)
August 7th 2017, 00; SumOfMaxCurrentPoints -> 15 (max from hour 01h from both users 4 + 11)

这通常使用子查询来完成,提取每个小时的 max(currentPoints) 用户,然后对结果求和并每小时聚合。

例如,Kibana Timelion 可以做到这一点吗?我找不到使用文档来实现此目的的方法。

谢谢亚历克斯

4

1 回答 1

0

在处理另一个项目时,我偶然发现了在 Kibana/Elasticsearch 中不使用 Timelion 的答案。

该功能称为同级管道聚合,在这种情况下,您使用 Sum Bucket。您可以将它与任何最近的 Kibana/Elastic 可视化一起使用(我使用的是 5.5 版)。

对于数据集,例如:

@timestamp; userId; currentPoints
August 7th 2017, 00:30:37.319; myUserName; 4
August 7th 2017, 00:43:22.121; myUserName; 10
August 7th 2017, 00:54:29.177; myUserName; 7
August 7th 2017, 01:10:29.352; myUserName; 4
August 7th 2017, 00:32:37.319; myOtherUserName; 12
August 7th 2017, 00:44:22.121; myOtherUserName; 17
August 7th 2017, 00:56:29.177; myOtherUserName; 8
August 7th 2017, 01:18:29.352; myOtherUserName; 11

您想要每个 userId 的 (currentPoints) 所有 MAXs(currentPoints) 的每小时总和,结果是:

August 7th 2017, 00; SumOfMaxCurrentPoints -> 27 (max from hour 00h from both users 10 + 17)
August 7th 2017, 00; SumOfMaxCurrentPoints -> 15 (max from hour 01h from both users 4 + 11)

你可以做:

公制

  1. 聚合:同级管道聚合(Sum Bucket)
  2. 桶聚合类型:条款
  3. 桶字段:userId
  4. Bucket Size:如果您想要总精度,则高于用户数的舒适值
  5. 指标聚合:最大
  6. 指标字段:currentPoints

  1. 存储桶类型:拆分行
  2. 桶聚合:日期直方图
  3. 直方图字段:@timestamp
  4. 直方图间隔:每小时
于 2018-11-28T10:20:12.463 回答