Lucene提供了方便您創建自建查詢的API,也通過QueryParser提供了強大的查詢語言。 本文講述Lucene的查詢語句解析器支持的語法,Lucene的查詢語句解析器是使用JavaCC工具生成的詞法解析器,它將查詢字串解析為Lucene Query對象。 |
項(Term) |
一條搜索語句被拆分為一些項(term)和操作符(operator)。項有兩種類型:單獨項和短語。 單獨項就是一個單獨的單詞,例如"test" , "hello"。 短語是一組被雙引號包圍的單詞,例如"hello dolly"。 多個項可以用布爾操作符連接起來形成復雜的查詢語句(接下來您就會看到)。 注意:Analyzer建立索引時使用的解析器和解析單獨項和短語時的解析器相同,因此選擇一個不會受查詢語句干擾的Analyzer非常重要。 |
域(Field) |
Lucene支持域。您可以指定在某一個域中搜索,或者就使用默認域。域名及默認域是具體索引器實現決定的。 您可以這樣搜索域:域名+":"+搜索的項名。 舉個例子,假設某一個Lucene索引包含兩個域,title和text,text是默認域。如果您想查找標題為"The Right Way"且含有"don't go this way"的文章,您可以輸入: title:"The Right Way" AND text:go 或者 title:"Do it right" AND right 因為text是默認域,所以這個域名可以不行。 注意:域名只對緊接于其后的項生效,所以 title:Do it right 只有"Do"屬于title域。"it"和"right"仍將在默認域中搜索(這里是text域)。 |
項修飾符(Term Modifiers) |
||||||||||||
Lucene支持項修飾符以支持更寬范圍的搜索選項。
|
||||||||||||
布爾操作符可將項通過邏輯操作連接起來。Lucene支持AND, "+", OR, NOT 和 "-"這些操作符。(注意:布爾操作符必須全部大寫)
|
|||||||||||||||
分組(Grouping) |
Lucene支持使用圓括號來組合字句形成子查詢。這對于想控制查詢布爾邏輯的人十分有用。 搜索含有"jakarta"或者"apache",同時含有"website"的文檔,使用查詢: (jakartaOR apache) AND website 這樣就消除了歧義,保證website必須存在,jakarta和apache中之一也存在。 |
轉義特殊字符(Escaping Special Characters) |
Lucene支持轉義特殊字符,因為特殊字符是查詢語法用到的。現在,特殊字符包括 + - && || ! ( ) { } [ ] ^ " ~ * ? : " 轉義特殊字符只需在字符前加上符號",例如搜索(1+1):2,使用查詢 "(1"+1")":2 |