laoding
          本來我以為,隱身了別人就找不到我,沒有用的,像我這樣拉風的男人,無論走到哪里,都像在黑暗中的螢火蟲一樣,那樣的鮮明,那樣的出眾。我那憂郁的眼神,稀疏的胡茬,那微微隆起的將軍肚和親切的笑容......都深深吸引了眾人......
          posts - 0,  comments - 37,  trackbacks - 0
          原文來自:http://liyu2000.nease.net/article/Lucene/queryparsersyntax.htm

          緒論

          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支持單個與多個字符的通配搜索。

          使用符號"?"表示單個任意字符的通配。

          使用符號"*"表示多個任意字符的通配。

          單個任意字符匹配的是所有可能單個字符。例如,搜索"text或者"test",可以這樣:

          te?t

          多個任意字符匹配的是0個及更多個可能字符。例如,搜索test, tests 或者 tester,可以這樣:

          test*

          您也可以在字符竄中間使用多個任意字符通配符。

          te*t

          注意:您不能在搜索的項開始使用*或者?符號。

          模糊查詢

          Lucene支持基于Levenshtein Distance與Edit Distance算法的模糊搜索。要使用模糊搜索只需要在單獨項的最后加上符號"~"。例如搜索拼寫類似于"roam"的項這樣寫:

          roam~

          這次搜索將找到形如foam和roams的單詞。

          注意:使用模糊查詢將自動得到增量因子(boost factor)為0.2的搜索結果.

          鄰近搜索(Proximity Searches)

          Lucene還支持查找相隔一定距離的單詞。鄰近搜索是在短語最后加上符號"~"。例如在文檔中搜索相隔10個單詞的"apache"和"jakarta",這樣寫:

          "jakarta apache"~10

          Boosting a Term

          Lucene provides the relevance level of matching documents based on the terms found. To boost a term use the caret, "^", symbol with a boost factor (a number) at the end of the term you are searching. The higher the boost factor, the more relevant the term will be.

          Lucene可以設置在搜索時匹配項的相似度。在項的最后加上符號"^"緊接一個數字(增量值),表示搜索時的相似度。增量值越高,搜索到的項相關度越好。

          Boosting allows you to control the relevance of a document by boosting its term. For example, if you are searching for jakarta apache and you want the term "jakarta" to be more relevant boost it using the ^ symbol along with the boost factor next to the term. You would type:

          通過增量一個項可以控制搜索文檔時的相關度。例如如果您要搜索jakarta apache,同時您想讓"jakarta"的相關度更加好,那么在其后加上"^"符號和增量值,也就是您輸入:

          jakarta^4 apache

          This will make documents with the term jakarta appear more relevant. You can also boost Phrase Terms as in the example:

          這將使得生成的doucment盡可能與jakarta相關度高。您也可以增量短語,象以下這個例子一樣:

          "jakarta apache"^4 "jakarta lucene"

          By default, the boost factor is 1. Although, the boost factor must be positive, it can be less than 1 (i.e. .2)

          默認情況下,增量值是1。增量值也可以小于1(例如0.2),但必須是有效的。

          布爾操作符

          布爾操作符可將項通過邏輯操作連接起來。Lucene支持AND, "+", OR, NOT 和 "-"這些操作符。(注意:布爾操作符必須全部大寫)

          OR

          OR操作符是默認的連接操作符。這意味著如果兩個項之間沒有布爾操作符,就是使用OR操作符。OR操作符連接兩個項,意味著查找含有任意項的文檔。這與集合并運算相同。符號||可以代替符號OR。

          搜索含有"jakarta apache" 或者 "jakarta"的文檔,可以使用這樣的查詢:

          "jakarta apache" jakarta

          或者

          "jakarta apache" OR jakarta

          AND

          AND操作符匹配的是兩項同時出現的文檔。這個與集合交操作相等。符號&&可以代替符號AND。

          搜索同時含有"jakarta apache" 與 "jakarta lucene"的文檔,使用查詢:

          "jakarta apache" AND "jakarta lucene"

          +

          "+"操作符或者稱為存在操作符,要求符號"+"后的項必須在文檔相應的域中存在。

          搜索必須含有"jakarta",可能含有"lucene"的文檔,使用查詢:

          +jakarta apache

          NOT

          NOT操作符排除那些含有NOT符號后面項的文檔。這和集合的差運算相同。符號!可以代替符號NOT。

          搜索含有"jakarta apache",但是不含有"jakarta lucene"的文檔,使用查詢:

          "jakarta apache" NOT "jakarta lucene"

          注意:NOT操作符不能單獨與項使用構成查詢。例如,以下的查詢查不到任何結果:

          NOT "jakarta apache"

          -

          "-"操作符或者禁止操作符排除含有"-"后面的相似項的文檔。

          搜索含有"jakarta apache",但不是"jakarta lucene",使用查詢:

          "jakarta apache" -"jakarta lucene"

          分組(Grouping

          Lucene支持使用圓括號來組合字句形成子查詢。這對于想控制查詢布爾邏輯的人十分有用。

          搜索含有"jakarta"或者"apache",同時含有"website"的文檔,使用查詢:

          (jakartaOR apache) AND website

          這樣就消除了歧義,保證website必須存在,jakarta和apache中之一也存在。

          轉義特殊字符(Escaping Special Characters

          Lucene支持轉義特殊字符,因為特殊字符是查詢語法用到的。現在,特殊字符包括

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

          轉義特殊字符只需在字符前加上符號",例如搜索(1+1):2,使用查詢

          "(1"+1")":2

          posted on 2008-10-31 18:07 老丁 閱讀(2036) 評論(1)  編輯  收藏 所屬分類: 搜索引擎 lucene

          FeedBack:
          # re: Lucene的查詢語法!(搜索引擎)
          2008-12-17 14:21 | soloman
          很好,學習了。  回復  更多評論
            
          本博客主為學習和復習之用,無關其他,想罵人的繞道
          Email:dkm123456@126.com
          大家一起交流進步
          QQ:283582761


          <2008年12月>
          30123456
          78910111213
          14151617181920
          21222324252627
          28293031123
          45678910

          留言簿(4)

          我參與的團隊

          文章分類(50)

          文章檔案(48)

          相冊

          朋友

          搜索

          •  

          積分與排名

          • 積分 - 96532
          • 排名 - 600

          最新評論

          主站蜘蛛池模板: 承德县| 望江县| 保德县| 襄樊市| 德令哈市| 南安市| 菏泽市| 伊宁市| 双鸭山市| 全州县| 苏尼特左旗| 苗栗县| 祥云县| 河源市| 博白县| 黎川县| 西峡县| 勃利县| 阿瓦提县| 平遥县| 都匀市| 龙岩市| 乌海市| 台中市| 南乐县| 杂多县| 青州市| 嘉峪关市| 璧山县| 兰西县| 衢州市| 泾源县| 长白| 凤山市| 河间市| 策勒县| 罗甸县| 鹤山市| 会东县| 麻阳| 从化市|