2017-06-16 35 views
0

我試圖找到一種方法來解析對kibana 5.3 UserAgent的,所以我可以得到如下回應:Lucene的語法上ELK 5.3

"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是字符串類型,他是可搜索分析了。任何人都可以給我一個暗示,我錯過了什麼?謝謝

回答

1

您需要爲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]+" 
    } 
    } 
} 
+0

非常感謝!正是我需要的 – jthemovie