Lucene查詢語法以可讀的方式書寫,而後使用JavaCC進行詞法轉換,轉換成機器可識別的查詢。apache
詞語查詢(Terms) 單詞,例如:"test","hello" 語句,例如:"hello,world!" 字段查詢(Field) title:hello 或者 title:"hello title" //搜索title爲 hello title關鍵字的文檔 title:hello title //搜索title爲hello,或者包含title關鍵字的文檔 通配符查詢(WildCard Searches) 支持在單個單詞或者語句中添加通配 ? 匹配單個字符 * 匹配0個或多個字符 模糊詞查詢(Fuzzy Searches) 想要搜索模糊詞,須要在詞語後面加上符號~ test~ //搜索和test相近的詞,如text或者tests等詞 test~0.8 //支持在~後面添加模糊係數,模糊係數[0-1],越靠近1表示越相近,默認模糊係數爲0.5。 鄰近詞查詢(Proximity Searches) 模糊詞只是針對某個單詞,在語句間也存在模糊搜索的概念,只不過不是單詞的模糊,而是單詞之間內容的模糊。 注意要使用雙引號`""`包圍, 這部份內容經過字符個數限制 "hello world"~10 //能夠匹配"hello 123 world"或者"hello,Tom,world" 範圍查詢(Range Searches) {}尖括號表示不包含最小值和最大值,能夠單獨使用 []方括號表示包含最小值和最大值,能夠單獨使用 grade:{60,80] //搜索成績grade字段小於等於80分,大於60分的 name:{A,C} //搜索名字在A和C之間的, 返回,bone、baby、barry 詞語相關度查詢(Boosting a Term) 若是單詞的匹配度很高,一個文檔中或者一個字段中能夠匹配屢次,那麼能夠提高該詞的相關度。使用符號^提升相關度。 jakarta^4 apache //提升jarkarta的比重 布爾操做符(Boolean Operator) 必須使用大寫 支持多種操做符: AND、 OR、 NOT、+ 、 - AND: 鏈接兩個搜索條件,僅當兩個搜索條件都知足時,才認爲匹配, 一般用來作交集操做。也能夠使用&&替換。 OR: 鏈接兩個搜索條件,當其中一個條件知足時,就認爲匹配。一般用來作並集操做。也能夠使用||替換。 NOT: 排除某個搜索條件。一般用來作差集操做也能夠使用!替換。 +: 包含該操做符後跟着的搜索條件。 -: 排除該操做符後跟着的搜索條件。 示範: tom AND john 或者 tom && john //搜索同時包含tom和john的文檔 tom OR john 或者 tom || john //搜索包含tom或者john的文檔 tom NOT john 或者 tom && !john //搜索包含tom,不包含john的文檔 +tom //搜索包含tom的文檔 -tom //搜索不包含tom的文檔 hello AND (tom OR john) //要搜索包含hello的文檔中,也包含tom或者john的 title:(+return +"pink panther") //要搜索標題中,既包含return 也包含pink panther的 轉義字符(Escaping Special Character) Lucene中支持不少的符號: + - && || ! ( ) { } [ ] ^ " ~ * ? : \ 若是須要搜索 (1+1):2 須要對改串進行轉換,使用字符\, 如:\(1\+1\)\:2