kibana的query string syntax 筆記


kibana的query string syntax 並非 Query String Query,只能說相似。kibana的 Lucene query string syntax(es的query string syntax能夠認爲等同於Lucene的)相似於下面的語法
{
      "query_string":{
            "default_field":"name",
            "query":"(this AND that) OR thu*"
       }
}

可是,很明顯, 不能支持這麼豐富的操做,沒這麼強大。 由於kibana中的搜索,只能是單行, 只能把query_string 在一行內寫完,也就是合併了query_string內的field,query。
因此其語法仍是很是相似的。

固然,要徹底理解query_string,仍是有些麻煩的。



AND OR 須要是大寫,小寫and or 是不行的! 否認是NOT,不是感嘆號(!)。過濾條件格式是:field:pattern,pattern遵循Lucene的query-string-syntax若是沒有空格,不須要引號,不然須要引號。pattern支持正則表達式;同時也支持 /ob[am]{2}a/ 這樣的正則表達式格式。—— 兩種正則表達式的區別呢?/reg/表達式,會去嘗試匹配一個單詞,從單詞的頭到尾。不容許多餘的空格。兩種能夠並行存在,如 msg:(/c+.*RE+.*g/  OR SELE*T)


/reg/是標準的正則表達式語法,其中的.表示任意字符,*表示數量一個或多個;而 msg:SELE*T 這種格式的正則表達式的* 同時表示了 字符和數量,至關於 .*



field 能夠有多個,field之間使用AND或OR,也可使用空格,空格表示的是使用default_operator(默認default_operator是OR);pattern也能夠是一個複合的pattern(複合pattern用小括號包圍起來,而後使用AND OR或空格等關鍵字)


能夠沒有field,那麼會查詢 default_field ,
引號的含義是把引號內部的全部內容看成一個單詞!如 msg:"Switching  JDBC Connection",引號內部的空格是隨意的(除了不能有換行符)內部的幾個單詞是有順序的(就是說不一樣順序就會不一樣結果), 引號內部是不支持正則表達式的,如 msg:"Switching  JDBC Connectio*" 是查詢不到任何內容的。(也就是說,不會對引號內的內容進行任何解析,如同linux命令的echo 的雙引號參數)(why?此時,pattern的必須單詞,由於Lucene的最小單位是單詞,即最小向量是單詞?)如msg:"JDBC "是ok的,但 msg:"JDB" 是查詢不到任何內容的,由於引號內部的JDB不是一個完整的 已經被es索引好了的 向量。(咱們的日誌也沒有產生JDB這樣的單詞)

msg:JDB 也是無果,可是msg:JDB* 就是ok的!pattern沒有引號包圍,那麼可使用正則表達式,可是通常最好不要在前面使用,cuz:
Warning
Allowing a wildcard at the beginning of a word (eg "*ing") is particularly heavy, because all terms in the index need to be examined, just in case they match. Leading wildcards can be disabled by setting allow_leading_wildcard to false.

另外最好不要直接一個純*做爲pattern,cuz:
Warning
Pure wildcards \* are rewritten to exists queries for efficiency.As a consequence, ...


示例:
app_name:project_app  AND level:ERROR AND full_message:"Unknown column "

level:ERROR 能夠寫成 level:ERROr, level:erRor, 可是 level:ERRO 就不行。固然這也得看level是什麼數據類型,是否容許變形。這些都是能夠在es中設置的。

參考:
https://www.elastic.co/guide/en/elasticsearch/reference/6.0/query-dsl-query-string-query.html#query-string-syntax
https://www.imooc.com/article/38062

html

相關文章
相關標籤/搜索