2016-08-24 117 views
0

我正在將Splunk查詢翻譯成Elasticsearch DSL。 我要檢查,如果在日誌中的URL中包含類似:如何正確使用elasticsearch正則表達式查詢?

"script>" OR "UNION ALL SELECT" 

很公平我想,去了doc和:

{ 
    "regexp": { 
    "http.url": "script>" 
    } 
} 

Elasticsearch(2.3)回覆:

「ROOT_CAUSE」:[{ 「原因」: 「無法解析搜索源未知搜索元素[正則表達式]。」, 「噸ype「:」search_parse_exception「, 」line「:2,

請問有人能夠啓發我關於這類查詢嗎?

回答

2

從文檔開始時,這是一個相當直接的錯誤。在文檔中,我們通常只顯示原始查詢(及其參數)。查詢可以是複合查詢或葉子查詢。 regexp是葉子查詢的一個例子。

但是,這還不足以實際發送查詢。你錯過了DSL的一個簡單的包裝一部分任何查詢:

{ 
    "query": { 
    "regexp": { 
     "http.url": "script>" 
    } 
    } 
} 

要使用複合查詢,最好的辦法是使用bool compound query

它具有mustmust_notshould,或filter並且每個接受查詢(或過濾器,它們只是未得,可高速緩存的查詢)的陣列。 should就像它的OR一樣,但是當您將must與它一起添加時,請閱讀它的行爲方式的文檔。要點是should本身就像OR(如下圖所示),但如果將它與must結合使用,那麼它將變得完全可選,而不使用"minimum_should_match": 1

{ 
    "query": { 
    "bool": { 
     "should": [ 
     { 
      "term": { 
      "http.url": "script>" 
      } 
     }, 
     { 
      "term": { 
      "http.url": "UNION ALL SELECT" 
      } 
     } 
     ] 
    } 
    } 
} 
+0

我明白了。對困惑感到抱歉。這個查詢似乎工作。如果你能告訴我如何對查詢應用OR邏輯,那將是非常好的。儘管我的問題沒有太明確。 – wishi

+0

你走了。我冒昧地將'regexp'改爲'term',它假設**精確的**匹配行爲。 – pickypg