Lucene中Query語法樹的整理
阿新 • • 發佈:2019-01-29
_NUM_CHAR::=["0"-"9"] //數字_ESCAPED_CHAR::="//" [ "//", "+", "-", "!", "(", ")", ":", "^", "[", "]", "/"", "{", "}", "~", "*", "?" ] > //特殊字元,_TERM_START_CHAR ::=( ~[ "", "/t", "/n", "/r", "+", "-", "!", "(", ")", ":", "^","[", "]", "/"", "{", "}", "~", "*", "?" ] //TERM的起始字元,除了列出的其它字元都可以_TERM_CHAR::=( <_TERM_START_CHAR >|<_ESCAPED_CHAR>|"-"|"+" ) >//TERM可使用字元_WHITESPACE::= ( ""|"/t"|"/n"|"/r") //空格和回車,<DEFAULT> TOKEN:
AND::=("AND"|"&&")
OR::=("OR"|"||")
NOT::=("NOT"|"!")
PLUS::="+"
MINUS::="-"
LPAREN::="("
RPAREN::=")"
COLON::=":"
STAR::="*"
CARAT::="^"//後接Boost,原文<CARAT: "^" > : Boost,後面Boost說明什麼沒明白 QUOTED::="/"" (~["/""] |"///"")+ "/""// 表示用"包起來的字串,字元"開始,中間由不是"的符號或者連著的這兩個符號/"組成,字元"結束, TERM::=<_TERM_START_CHAR> (<_TERM_CHAR>)*
FUZZY_SLOP::="~" ( (<_NUM_CHAR>)+ ( "." (<_NUM_CHAR>)+ )? )?//字元~開始,而後是數字.Lucene支援模糊查詢,例如"roam~"或"roam~0.8",The value is between 0 and 1,演算法為the Levenshtein Distance, or Edit Distance algorithm PREFIXTERM::=(<_TERM_START_CHAR>|"*") (<_TERM_CHAR>)*"*">//模糊查詢,表示以某某開頭的查詢, 字元表示為"something*",字首允許模糊符號*,中間可有字元也可沒有, 結尾必須是* WILDTERM::=(<_TERM_START_CHAR>| [ "*", "?" ]) (<_TERM_CHAR>| ( [ "*", "?" ] ))*>//類似上面,但同時支援?字元,結尾可以是字元也可以是* ?。使用[]表示or關係時,不需要使用|,只要,號分割即可 RANGEIN_START::="["//在RangeQuery中,[或{表示了是否包含邊界條件本身, 用字元表示為"[begin TO end]" 或者"{begin TO end}",後接RangeIn RANGEEX_START::="{"//同上,後接RangeEx<Boost> TOKEN:
NUMBER::=(<_NUM_CHAR>)+ ( "." (<_NUM_CHAR>)+ )?//後接DEFAULT, 整數或小數<RangeIn> TOKEN:
RANGEIN_TO::="TO"
RANGEIN_END::="]"//後接DEFAULT, RangIn的結束 RANGEIN_QUOTED::="/"" (~["/""] |"///"")+ "/""//同上述QUOTED,表示用"包起來的字串, RANGEIN_GOOP::= (~[ "", "]" ])+//1個或多個不是空格和]的符號,這樣就能提取出[]中的內容<RangeEx> TOKEN :
RANGEEX_TO::="TO">
RANGEEX_END::="}"//後接DEFAULT, RangeEx的結束 RANGEEX_QUOTED::="/"" (~["/""] |"///"")+ "/""//同上述QUOTED,表示用"包起來的字串, RANGEEX_GOOP::=(~[ "", "}" ])+//1個或多個不是空格和]的符號,這樣就能提取出[]中的內容<DEFAULT, RangeIn, RangeEx> SKIP : {
<<_WHITESPACE>>
} //所有空格和回車被忽略
AND::=("AND"|"&&")
OR::=("OR"|"||")
NOT::=("NOT"|"!")
PLUS::="+"
MINUS::="-"
LPAREN::="("
RPAREN::=")"
COLON::=":"
STAR::="*"
CARAT::="^"//後接Boost,原文<CARAT: "^" > : Boost,後面Boost說明什麼沒明白
FUZZY_SLOP::="~" ( (<_NUM_CHAR>)+ ( "." (<_NUM_CHAR>)+ )? )?//字元~開始,而後是數字.Lucene支援模糊查詢,例如"roam~"或"roam~0.8",The value is between 0 and 1,演算法為the Levenshtein Distance, or Edit Distance algorithm
NUMBER::=(<_NUM_CHAR>)+ ( "." (<_NUM_CHAR>)+ )?//後接DEFAULT, 整數或小數<RangeIn> TOKEN:
RANGEIN_TO::="TO"
RANGEIN_END::="]"//後接DEFAULT, RangIn的結束 RANGEIN_QUOTED::="/"" (~["/""] |"///"")+ "/""//同上述QUOTED,表示用"包起來的字串, RANGEIN_GOOP::= (~[ "", "]" ])+//1個或多個不是空格和]的符號,這樣就能提取出[]中的內容<RangeEx> TOKEN :
RANGEEX_TO::="TO">
RANGEEX_END::="}"//後接DEFAULT, RangeEx的結束 RANGEEX_QUOTED::="/"" (~["/""] |"///"")+ "/""//同上述QUOTED,表示用"包起來的字串, RANGEEX_GOOP::=(~[ "", "}" ])+//1個或多個不是空格和]的符號,這樣就能提取出[]中的內容<DEFAULT, RangeIn, RangeEx> SKIP : {
<<_WHITESPACE>>
} //所有空格和回車被忽略