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类型,他是Searchable和Analyzed。谁能给我一个关于我所缺少的东西的提示?谢谢
您的 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]+"
}
}
}
我正在尝试找到一种在 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类型,他是Searchable和Analyzed。谁能给我一个关于我所缺少的东西的提示?谢谢
您的 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]+"
}
}
}