使用自定义查询在 Elasticsearch 中进行可视化

Visualization in Elasticsearch using customized query

这是我的情况,假设我的索引文档如下所示:

{
"user" : 1
"started" : "2021-06-05"
"finished" : -1
"status": "ONGOING"
}

{
"user" : 2
"started" : "2021-06-05"
"finished" : "2021-06-06"
"status": "DONE"

}

像这样我索引了 100 个文档。正在进行的文档的完成时间为 -1,并且完成一次具有有效的时间戳。我想可视化一个图表,该图表可以为我提供 X 轴上带有“已启动”字段的正在进行的应用程序的数量。 在日期直方图中,我只能获取该特定时间间隔内经过过滤的正在进行的进程。但是我希望每个时间间隔都计算正在进行的应用程序的计数,直到文档更新为完成时间。 无论如何我可以在 Kibana 中看到这个吗?即使是可以给我这个输出的弹性搜索查询也可以。

这和我曾经遇到过的一个问题非常相似,现在已经解决了。我花了很长时间试图创建一个查询来执行此操作但无济于事,但幸运的是这可以使用 Vega 的转换来实现。

如果你想将它 均匀地装箱,而不是使用开始时间作为你的 x 值 Here is the posted solution (look for my answer). The one thing I would add is; for the documents where you have "-1" as the finished time, if you do a formula transform 你可以将这些四舍五入到结束装箱时间。

但是,如果您仍想坚持“开始”/“完成”字段作为 summation/evaluation 的要点,这也是可能的。我将简要介绍如何执行此操作...

方法:

  1. 您需要做的第一件事是使用引用“时间戳”的公共字段创建数据的两个副本。第一个数据集将具有分配给字段“时间戳”(开始数据集)的“开始”值,第二个数据集将具有“完成”(完成日期集)。您可以使用 formula transform.

    实现此目的
  2. 然后您需要在每个数据集中创建一个名为“operation”的列,指的是该数据条目的作用——添加用户或删除用户。对于完成的数据集,您要分配一列“-1”和开始的数据集“1”。再次使用 formula transforms.

  3. 然后加入这些数据集备份。您现在需要按“时间戳”排序,并累加“操作”列。这可以使用 window transform.

    来实现

这应该会为您提供绘制它所需的数据。可以说这比装箱更准确,但如果您的数据集很大,它可能会产生非常混乱的结果 - 在这种情况下装箱要干净得多。

祝你好运,显然有很多内容需要填写,但是一个工作示例可能会花费我相当长的时间来拟定 - 而且复制的乐趣在哪里。