<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    szhswl
    宋針還的個人空間

            這里首先介紹一下基本的query:
    1,最普通的TermQuery
            TermQuery最普通, 用Term t=new Term("contents","cap"); new TermQuery(t)就可以構造
            TermQuery把查詢條件視為一個key, 要求和查詢內容完全匹配,比如Field.Keyword類型就可以使用TermQuery

    2,RangeQuery
            RangeQuery表示一個范圍的搜索條件,RangeQuery query = new RangeQuery(begin, end, included);
            最后一個boolean值表示是否包含邊界條件本身, 用字符表示為"[begin TO end]" 或者"{begin TO end}"

    3,PrefixQuery
            顧名思義,就是表示以某某開頭的查詢, 字符表示為"something*"

    4,BooleanQuery
            這個是一個組合的Query,你可以把各種Query添加進去并標明他們的邏輯關系,添加條件用

            public void add(Query query, boolean required, boolean prohibited)

            方法, 后兩個boolean變量是標示AND OR NOT三種關系 字符表示為" AND OR NOT" 或 "+ -" ,一個BooleanQuery中可以添加多個Query, 如果超過setMaxClauseCount(int)的值(默認1024個)的話,會拋出TooManyClauses錯誤.

    5,PhraseQuery
            表示不嚴格語句的查詢,比如"red pig"要匹配"red fat pig","red fat big pig"等,PhraseQuery所以提供了一個setSlop()參數,在查詢中,lucene會嘗試調整單詞的距離和位置,這個參數表示可以接受調整次數限制,如果實際的內容可以在這么多步內調整為完全匹配,那么就被視為匹配.在默認情況下slop的值是0, 所以默認是不支持非嚴格匹配的, 通過設置slop參數(比如"red pig"匹配"red fat pig"就需要1個slop來把pig后移動1位),我們可以讓lucene來模糊查詢. 值得注意的是,PhraseQuery不保證前后單詞的次序,在上面的例子中,"pig red"需要2個slop,也就是如果slop如果大于等于2,那么"pig red"也會被認為是匹配的.

    6,WildcardQuery
            使用?和*來表示一個或多個字母比如wil*a可以匹配 wilda ,wilba ,wilxaaaa...,值得注意的是,在wildcard中,只要是匹配上的紀錄,他們的相關度都是一樣的,比如wilxaaaa和wilda的對于wil*a的相關度就是一樣的.

    7,FuzzyQuery
            這個Query對中文沒有什么用處,他能模糊匹配英文單詞(前面的都是詞組),比如fuzzy和wuzzy他們可以看成類似, 對于英文的各種時態變化和復數形式,這個FuzzyQuery還算有用,匹配結果的相關度是不一樣的.字符表示為 "fuzzy~"

    注意上面WildcardQuery類,在網上有很多資料在介紹WildcardQuery時,比如:http://www.ibm.com/developerworks/cn/web/wa-lucene2/
    中就寫到:
    如果你想查詢 Teach, Teacher 和 Teaching,你就可以使用查詢語句 “Teach*”。下面代碼 顯示了通配符查詢的過程。

     1     public void testWildcardSearch(String indexDirectory)throws Exception{
     2             Directory dir = FSDirectory.getDirectory(indexDirectory,false);
     3             IndexSearcher indexSearcher = new IndexSearcher(dir);
     4             String[] searchWords = {"tex*""tex?""?ex*"};
     5             Query query;
     6             for(int i = 0; i < searchWords.length; i++){
     7                 query = new WildcardQuery(new Term("title",searchWords[i]));
     8                 Hits results = indexSearcher.search(query);
     9                 System.out.println(results.length() + "search results for query " + searchWords[i]);
    10             }
    11     }

    都給人以誤解(當然上面代碼這樣寫是沒錯的、可以執行的),比如像GOOGLE一樣在查詢框中用"Teach*"時查詢會實例化WildcardQuery類,而在《Lucene IN ACTION》書中關于解析查詢表達式:QueryParser的說明中寫到了通配符和前綴查詢關系:
            如果某個項包含了一個星號或問號,該項就會看作是進行通配符查詢的一個WildcardQuery對象。而當查詢項僅在項的末尾有一個星號時,QueryParser會將它優化為前綴查詢的 PrefixQuery對象。不管是前綴查詢,還是通配符查詢,其對象都會被默認地轉換為小寫形式,不過該轉換行為也是可以控制的。
            如果要關閉自動的小寫轉換功能,就一定要自己創建QueryParser實例,而不能只通過靜態的parse()方法。當通配符位于查詢項的開頭時,不能使用QueryParser進行解析;但由API的構造函數創建的Wildcard對象,則允許查詢項以通配符開頭(但這以損失查詢性能為代價)。

    所以在這里給剛上路的新手一點說明。



    ---------------------------------------------------------------------------------------------------------------------------------
    說人之短,乃護己之短。夸己之長,乃忌人之長。皆由存心不厚,識量太狹耳。能去此弊,可以進德,可以遠怨。
    http://m.tkk7.com/szhswl
    ------------------------------------------------------------------------------------------------------ ----------------- ---------
    posted on 2007-12-18 11:43 宋針還 閱讀(1353) 評論(0)  編輯  收藏

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 亚洲最大无码中文字幕| 亚洲综合色丁香麻豆| 无码一区二区三区亚洲人妻| 免费三级毛片电影片| 91亚洲国产成人久久精品网址| 18禁美女黄网站色大片免费观看| 亚洲综合一区二区精品导航| 日韩精品在线免费观看| 亚洲国产综合精品中文第一区| 一级毛片免费视频| 亚洲妓女综合网99| 最近免费中文字幕大全视频| 亚洲乱妇熟女爽到高潮的片| 国产高清免费在线| 一级毛片aaaaaa视频免费看| 亚洲精品少妇30p| 99视频免费观看| 亚洲一日韩欧美中文字幕在线| 免费人成在线视频| 国产亚洲男人的天堂在线观看 | 深夜免费在线视频| 中文字幕一精品亚洲无线一区| 免费日本一区二区| 亚洲中文无码线在线观看| 国产高清免费在线| 国产自国产自愉自愉免费24区| 亚洲综合视频在线| 国产一区二区三区免费看| 中文字幕免费在线视频| 亚洲毛片基地日韩毛片基地| 最近中文字幕无免费视频| 一区二区三区免费精品视频| 久久99亚洲网美利坚合众国| 成人毛片18女人毛片免费| 99re6在线视频精品免费| 亚洲美女大bbbbbbbbb| 国产一区视频在线免费观看| 久久久久久久99精品免费观看 | 老司机午夜免费视频| 亚洲AV成人无码久久精品老人| 成人毛片免费视频|