Lucene查詢語法詳解

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
相關文章
相關標籤/搜索