lucene(Kibana)搜索規則

kibanna用的是lucene的搜索規則

Lucene所支持的查詢語法可見http://lucene.apache.org/java/3_0_1/queryparsersyntax.html

(1) 語法關鍵字

+ - && || ! ( ) { } [ ] ^ " ~ * ? : \

如果所要查詢的查詢詞中本身包含關鍵字,則需要用\進行轉義

(2) 查詢詞(Term)

Lucene支持兩種查詢詞,一種是單一查詢詞,如"hello",一種是詞組(phrase),如"hello world"。

(3) 查詢域(Field)

在查詢語句中,可以指定從哪個域中尋找查詢詞,如果不指定,則從默認域中查找。

查詢域和查詢詞之間用:分隔,如title:"Do it right"。

:僅對緊跟其後的查詢詞起作用,如果title:Do it right,則僅表示在title中查詢Do,而it right要在默認域中查詢。

(4) 通配符查詢(Wildcard)

支持兩種通配符:?表示一個字符,*表示多個字符。

通配符可以出現在查詢詞的中間或者末尾,如te?t,test*,te*t,但決不能出現在開始,如*test,?test。

(5) 模糊查詢(Fuzzy)

模糊查詢的算法是基於Levenshtein Distance,也即當兩個詞的差別小於某個比例的時候,就算匹配,如roam~0.8,即表示差別小於0.2,相似度大於0.8纔算匹配。

(6) 臨近查詢(Proximity)

在詞組後面跟隨~10,表示詞組中的多個詞之間的距離之和不超過10,則滿足查詢。

所謂詞之間的距離,即查詢詞組中詞爲滿足和目標詞組相同的最小移動次數。

如索引中有詞組"apple boy cat"。

如果查詢詞爲"apple boy cat"~0,則匹配。

如果查詢詞爲"boy apple cat"~2,距離設爲2方能匹配,設爲1則不能匹配。

(0)

boy

apple

cat

(1)

 

boy

apple

cat

(2)

apple

boy

cat

如果查詢詞爲"cat boy apple"~4,距離設爲4方能匹配。

(0)

cat

boy

apple

(1)

 

cat

boy

apple

(2)

 

boy

cat

apple

(3)

 

boy

apple

cat

(4)

apple

boy

cat

 

(7) 區間查詢(Range)

區間查詢包含兩種,一種是包含邊界,用[A TO B]指定,一種是不包含邊界,用{A TO B}指定。

如date:[20020101 TO 20030101],當然區間查詢不僅僅用於時間,如title:{Aida TO Carmen}

(8) 增加一個查詢詞的權重(Boost)

可以在查詢詞後面加^N來設定此查詢詞的權重,默認是1,如果N大於1,則說明此查詢詞更重要,如果N小於1,則說明此查詢詞更不重要。

如jakarta^4 apache,"jakarta apache"^4 "Apache Lucene"

(9) 布爾操作符

布爾操作符包括連接符,如AND,OR,和修飾符,如NOT,+,-。

默認狀態下,空格被認爲是OR的關係,QueryParser.setDefaultOperator(Operator.AND)設置爲空格爲AND。

+表示一個查詢語句是必須滿足的(required),NOT和-表示一個查詢語句是不能滿足的(prohibited)。

(10) 組合

可以用括號,將查詢語句進行組合,從而設定優先級。

如(jakarta OR apache) AND website

 

Lucene的查詢語法是由QueryParser來進行解析,從而生成查詢對象的。

通過編譯原理我們知道,解析一個語法表達式,需要經過詞法分析和語法分析的過程,也即需要詞法分析器和語法分析器。

QueryParser是通過JavaCC來生成詞法分析器和語法分析器的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章