1

我正在尝试根据 Elasticsearch 中的数据自定义数据表。

假设我有一个字段“ Department ”,可以是“Dept A”或“Dept B”或“Dept C”等......但我只能显示所有记录的总数,而不是通过使用获得小计值部门领域。

请参考下表: 在此处输入图像描述

只有“总计”列是正确的。我的任务是实现“Dept A”和“Other Dept”下的数字。

是否有任何过滤器可以应用于度量?或者还有其他方法可以做到吗?

请告诉您是否需要更多信息。

更新 - - - - - - - - - - - - - - - - - - - - - - - -

搜索后,我找到了解决方法:

首先在 Kibana 中创建两个脚本字段,如下所示:

脚本字段名称:sf_dept_A

郎:无痛

脚本:

if (doc["department"].value.equals("Dept A"))
    return 1;
else
    return 0;

脚本字段名称:sf_other_dept

郎:无痛

脚本:

if (doc["department"].value.equals("Dept A") == false)
    return 1;
else
    return 0;

创建完上面两个脚本字段后,去创建一个数据表,只需添加脚本字段总和的mertics,

添加指标

  • 聚合:总和

  • 字段:sf_dept_A

  • 自定义标签:A 部门

添加指标

  • 聚合:总和
  • 字段:sf_dept_A
  • 自定义标签:A 部门

添加指标

  • 聚合:计数
  • 自定义标签:总计

这样,不同部门的计数可以按列分开。但这需要更多的资源,如果我有很多部门,我必须创建很多领域。

4

2 回答 2

3

在最新版本的 Kibana 中,您可以使用“JSON 输入”在给定的可视化中即时执行此操作,而无需脚本化字段:

  • 在您的可视化中,创建一个“总和”指标(在任何字段上,我认为 - 该字段实际上最终会被忽略......?)
  • 在 Sum Metric 下,单击“高级”链接,显示“JSON 输入”文本框
  • 在该文本框中,键入以下内容:{ "script": { "inline": "doc['SomeField'].value == 'SomeValue' ? 1 : 0", "lang": "painless" } }

你有它!您现在有一个条件计数指标。默认标签将是“总和(您选择的任何字段)”,因此您需要在指标上设置更准确的自定义标签,例如“计数(某些值)”。

这仍然会运行缓慢/昂贵,但据我了解,与您在问题中附加的解决方案相比,有几个优势:

  1. 您无需提前创建所有这些脚本化字段,您可以在需要时为您需要的确切目的定义脚本
  2. 创建脚本字段会在许多(全部?)查询上产生查询执行时间开销,而这种方法仅在您运行此特定可视化时才会产生开销
于 2019-01-10T09:10:37.857 回答
1

在您的拆分行下,您可以简单地应用过滤器

假设您在每条记录中都有一个名为Department的字段,您可以继续使用两个过滤器:

Department:"Dept A"

Department:"Dept B"

在Kibana中它可能看起来像这样。

或者

您可以使用术语 聚合来根据字段的相应值区分结果。理想情况下,它应该显示每个部门的计数。但是我不认为你可以显示计数,部门明智地由列分隔,但正如你在上面的屏幕截图中显示的那样。

而您可以看到每个部门的计数以及您选择的时间戳,看起来应该是这样的:

Timestamp     Departments         Count
01/01/17        Depa A              1
01/01/17        Depa B              2 
02/01/17        Depa C              1
02/01/17        Depa B              6 

希望这可以帮助!

于 2017-02-08T05:32:52.027 回答