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

时间:2019-03-21 21:57:27

标签: elasticsearch kibana-5 elasticsearch-painless

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

"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,我确定我需要使用正则表达式来做到这一点。我只是想知道是否还有另一种不使用正则表达式的方法。有什么建议么。

1 个答案:

答案 0 :(得分:1)

有很多方法。您可以尝试以下方法:

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

在kibana 5中使用三重引号可能无效。我不记得了。只需用单引号代替