2014-03-28 90 views
16

我有一個字段「Alert」,其中包含一個包含空格,數字和特殊字符的長字符串。我把這個字段設置爲「not_analyzed」。使用通配符查詢,我可以按如下方式發出查詢並獲得我想要的結果。通配符搜索在Kibana中不起作用

POST /test-index-snort2/type-snort/_search 
{ 
    "query": { 
    "wildcard": { 
     "Alert": { 
     "value": "ET CNC*" 
     } 
    } 
    } 
} 

我想用Kibana來實現類似的搜索。但是,這樣做不會返回任何結果。看來我的Kibana查詢,如下所示:

Alert:"ET CNC*" 

這反過來又創造一個QUERY_STRING查詢,像這樣:

"query": { 
    "filtered": { 
     "query": { 
     "bool": { 
      "should": [ 
      { 
       "query_string": { 
       "query": "Alert:\"ET CNC*\"" 
       } 
      } 
      ] 
     } 
     }, 
     "filter": { 
     "bool": { 
      "must": [ 
      { 
       "match_all": {} 
      } 
      ] 
     } 
     } 
    } 

有沒有辦法讓通過QUERY_STRING查詢我做Kibana相同的結果使用通配符查詢?

下面是警報領域的映射和條目的示例:

"Alert": { 
     "type": "string", 
     "index": "not_analyzed" 
}, 

"Alert": "ET CNC Palevo Tracker Reported CnC Server TCP group 9 ", 
"Alert": "ET CNC Palevo Tracker Reported CnC Server TCP group 10 ", 
"Alert": "ET CNC Zeus Tracker Reported CnC Server TCP group 3 ", 

謝謝!

回答

15

感謝#elasticsearch中的多重分形,我有一個答案。默認情況下,query_string將小寫通配符輸入。這可以通過lowercase_expanded_terms = false設置禁用。但是,在Kibana中沒有辦法設置它。

polyfractal建議我創建一個分析器來小寫這個內容。這將允許我利用帶有通配符的query_string,並限制字段值在facet結果中以小寫字母顯示,但_source將保留原始格式。對我而言,這很好,是我正在向前邁進的解決方案。

除了從IRC:

<polyfractal> id set up the analyzer like this: tokenizer:keyword, filters: [lowercase] 
<polyfractal> that'll basically give you a lowercased `not_analyzed` field. may also want to disable norms, since you prolly dont need them either 
+2

聲明「默認情況下,query_string將小寫通配符輸入」非常有用。但是,我很困惑。如果我想要一個Mozilla的httpUserAgent,我的查詢可以是'httpUserAgent:* ozilla *'或簡單的'* Mozilla *'。這兩個查詢都返回包含「Mozilla」的結果,但是'httpUserAgent:* Mozilla *'不會返回任何結果。爲什麼是這樣? – harperville

+14

在Kibana 4中,** Settings> Advanced **包含'query:queryString:options',我添加了''lowercase_expanded_terms「:false'。 –

+2

@GrahamHannington:先生,你配得上頂! – skirsch

2

與此相關的,我能得到kibana lowercase_expanded_terms這一變化的工作:

diff --git a/src/app/services/querySrv.js b/src/app/services/querySrv.js 
index 72e5d8b..160285c 100644 
--- a/src/app/services/querySrv.js 
+++ b/src/app/services/querySrv.js 
@@ -102,7 +102,7 @@ function (angular, _, config, kbn) { 
       .size(q.size) 
       .facetFilter(ejs.QueryFilter(
       ejs.FilteredQuery(
-     ejs.QueryStringQuery(q.query || '*'), 
+     ejs.QueryStringQuery(q.query || '*').lowercaseExpandedTerms(false), 
        filterSrv.getBoolFilter(filterSrv.ids()) 
        )))).size(0); 

@@ -206,7 +206,7 @@ function (angular, _, config, kbn) { 
     switch(q.type) 
     { 
     case 'lucene': 
-  return ejs.QueryStringQuery(q.query || '*'); 
+  return ejs.QueryStringQuery(q.query || '*').lowercaseExpandedTerms(false); 
     case 'regex': 
     return ejs.RegexpQuery('_all',q.query); 
     default: 
@@ -281,4 +281,4 @@ function (angular, _, config, kbn) { 
    self.init(); 
    }); 
8

嘗試

{"wildcard":{"Alert":"ET CNC*"}} 

搜索酒吧。 您將在query_string中獲得預期的格式。

+0

這對我有用,謝謝薩蒂什。 –