Kibana:基于字段子字符串的饼图切片

Lio*_*ana 15 elasticsearch kibana

我正在尝试创建一个饼图可视化,它将显示前10个传入请求.我有一个搜索查询,只过滤传入的请求,这些请求有一个名为messages的字段,如下所示:"Incoming request/api/someaction".如何基于/ api/someaction部分而不是整个字符串进行聚合(因为那时"Incoming"被计为术语".

或者......我可以创建自定义字段,例如,另一个字段的子字符串吗?

谢谢

exh*_*uma 16

如前面评论中所述,我已经找到了解决问题的方法.对我来说,我有类似的价值观foo bar baz,我需要提取第一个单词.我可以使用"Advanced→JSON"字段,使用以下脚本执行此操作:

{
    "script": "( _value.indexOf(' ') > 0 ? _value.substring(0, _value.indexOf(' ')) : _value )"
}
Run Code Online (Sandbox Code Playgroud)

所以,在Kibana界面中,这看起来像这样:

具有脚本值的Kibana可视化配置


因此,在您的情况下,脚本可能应该是这样的:

{
    "script": "( _value.indexOf(' ') > 0 ? _value.substring(_value.lastIndexOf(' ')) : _value )"
}
Run Code Online (Sandbox Code Playgroud)

显然,这假设您要提取的消息部分遵循字符串中的最后一个空格.我写了一个一次性的Java类来测试上面的内容:

public class Foo {

    public static void main(String[] args){
        String tester = "Incoming request /api/someaction";
        String result = tester.substring(tester.lastIndexOf(" "));
        System.out.println(result);
    }

}
Run Code Online (Sandbox Code Playgroud)

据我所知,您可以在JSON字段的"script"键中使用任何Java代码.所以你也应该能够使用String.replaceAll或任何其他String方法使用正则表达式...

我没有测试过这个.如果有人有任何相关信息,请随时发表评论.