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

How to search substring from log field using the scripted fields in painless without regex

我正在尝试通过在日志字段中捕获一些 "keyword" 来使用 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";

只捕获 "Duplicate entry" 错误消息而不考虑用户 ID,我确信我需要使用正则表达式来做到这一点。我只是想知道是否有另一种不使用正则表达式的方法。有什么建议么。

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

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

在 kibana 5 三重引号中可能不起作用。我记不太清了。只需用单引号替换