首页 > 解决方案 > 如何在没有正则表达式的情况下使用脚本字段从日志字段中搜索子字符串

问题描述

我正在尝试通过在日志字段(一个长文本字段)中捕获一些“关键字”来使用无痛创建一些脚本字段。例如,我有一堆日志字段:

"Error: Duplicate entry in user1"

"Error: Duplicate entry in user2"

"Error: Duplicate entry in user1"

"Error: Duplicate entry in user3"

"Error: Duplicate entry in user2"

"Error: Duplicate entry in user1"

"Error: Duplicate entry in user3"

我正在使用的无痛:

if (doc['log.keyword'].value == 'Duplicate entry') {
return "match";
}
return "No match";

无论用户ID如何,只捕获“重复条目”错误消息,我确信我需要使用正则表达式来做到这一点。我只是想知道是否有另一种方法可以在不使用正则表达式的情况下做到这一点。有什么建议么。

标签: elasticsearchkibana-5elasticsearch-painless

解决方案


有很多方法。你可以试试这个:

GET logs/_search
{
  "query": {
    "script": {
      "script": 
      """
      if (doc["log.keyword"].value == null) return false;
      return doc["log.keyword"].value.contains("Duplicate entry");
      """
    }
  }
}

在 kibana 5 三重引号可能不起作用。我不记得确切。只需用单引号替换


推荐阅读