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界面中,这看起来像这样:
因此,在您的情况下,脚本可能应该是这样的:
{
"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方法使用正则表达式...
我没有测试过这个.如果有人有任何相关信息,请随时发表评论.
| 归档时间: |
|
| 查看次数: |
3337 次 |
| 最近记录: |