ELK 5.3 上的 Lucene 语法

Lucene Syntax on ELK 5.3

我正在尝试找到一种在 kibana 5.3 上解析 UserAgent 的方法,以便我可以获得以下响应:

"aws-sdk-java/1.11.76 Mac_OS_X/10.12.5"
"aws-sdk-java/1.11.78 Mac_OS_X/10.11.2"
"aws-sdk-java/1.11.80 Mac_OS_X/10.10.1"
"aws-sdk-java/1.11.83 Mac_OS_X/10.12.2"
"aws-sdk-java/1.10.33 Mac_OS_X/10.12.3"

等..

我试过?替换数字

{
  "query": {
    "match": {
      "userAgent": {
        "query": "aws-sdk-java/?.??.?? Mac_OS_X/??.??.??",
        "type": "phrase"
      }
    }
  }
}

或 <0-100> 用于数字范围

{
  "query": {
    "match": {
      "userAgent": {
        "query": "aws-sdk-java/<0-100>.<0-100>.<0-100> Mac_OS_X/<0-100>.<0-100>.<0-100>",
        "type": "phrase"
      }
    }
  }
}

甚至*

{
  "query": {
    "match": {
      "userAgent": {
        "query": "aws-sdk-java/*.*.* Mac_OS_X/*.*.*",
        "type": "phrase"
      }
    }
  }
}

没有,Kibana 从来没有找到任何东西,我需要做:

{
  "query": {
    "match": {
      "userAgent": {
        "query": "aws-sdk-java/*",
        "type": "phrase"
      }
    }
  }
}

然后它起作用了,但我不想排除字符串的其余部分。

userAgent字段是string类型,他是SearchableAnalyzed。谁能给我一个关于我所缺少的东西的提示?谢谢

您的 userAgent 字段需要 keyword 类型的子字段。或者,如果您依赖 Elasticsearch 来映射您的字符串字段 it should have it by default.

添加此 keyword 字段后,例如:

{
  "userAgent": {
    "type" "text",
    "fields": {
      "keyword": {
        "type": "keyword",
        "ignore_above": 256
      }
    }
  }
}

您可以使用此查询:

{
  "query": {
    "regexp": {
      "userAgent.keyword": "aws-sdk-java/[0-9]+\.[0-9]{2}\.[0-9]{2} Mac_OS_X/[0-9]{2}\.[0-9]{2}\.[0-9]+"
    }
  }
}