Lucene中幾種常用的Query


看完圖之后在來詳細說明一下。

1、phrasequery是用來查詢短語的。注意他只針對英文,對中文並沒有什么用處。

  核心用法:

  

@Test
    public void test02(){
        //新建查詢
        PhraseQuery query = new PhraseQuery();
        //設置分詞之間的距離
        query.setSlop(1);
        //添加前一個和后一個分詞
        query.add(new Term("content", "management"));
        query.add(new Term("content", "comprehension"));
        lu.query(query);
    }

結果:

一共查詢了4
76--評分:0.29177123----ss.txt
77--評分:0.29177123----tt.txt

下面我來詳細說明一下上面查詢操作

首相我查詢的是文章中包含  management  comprehension,並且他們之間還要有一個分詞。如下圖 【management 】 【and】 【comprehension】

query.setSlop就是設置他們之間隔開幾個分詞。

 

2、WildcardQuery

        使用如下,wildcardQuery是一個通配符查詢方式,你可以用‘?’或者‘*’來進行匹配。下面是查詢文件中有java字樣的,其中的v用?代替,我們會查詢出所有v處為任意字符,其他為ja_a的。

@Test
    public void test02(){
        //新建查詢
        /**********WildcardQuery通配符。可以使用'*'或者‘?’**************/
        Term term = new Term("content", "ja?a");
        Query query = new WildcardQuery(term);
        lu.query(query);
    }

上面的term如果為

  Term term = new Term("content", "*a");//表示前面不管,只要分詞后面有個a就行了

3、RangeQuery  范圍查詢,我們通常不直接用rangequery而是用NumericRangeQuery ,因為3.5沒找到rangequery。齊作用查詢數值的一個范圍。

     后面兩個boolean值控制是否包含上下限。

  

/**********RangeQuery范圍查詢**************/
NumericRangeQuery query= NumericRangeQuery.newFloatRange("filesize", 0.3f, 0.5f, true, true);
/************************/
lu.query(query);

4、 FuzzyQuery模糊查詢查詢。本質就是你可以寫錯一個單詞。比如你想找java,用了模糊查詢,使用jave可以找到。

/**********FuzzyQuery模糊查詢查詢**************/
Term term = new Term("content", "jave");
FuzzyQuery query = new FuzzyQuery(term);
lu.query(query);

同時,可以手動控制模糊度。

/**********FuzzyQuery模糊查詢查詢**************/
Term term = new Term("content", "jave");
FuzzyQuery query = new FuzzyQuery(term,0.3f);
lu.query(query);

0.3的時候模糊度就會更加大,查出的數據也會增多。默認不設置的時候為0.5

 

5、BooleanQuery邏輯查詢

主要作用是將查詢語句進行是否必須的設置   must為必須,should為不必須

/**********BooleanQuery邏輯查詢**************/
BooleanQuery boolQuery = new BooleanQuery();
Query query1 = new TermQuery(new Term("content", "java"));
Query query2 = new TermQuery(new Term("filename", "aa.txt"));
boolQuery.add(query1, Occur.MUST);
boolQuery.add(query2, Occur.MUST);

lu.query(boolQuery);

到這里基本的常用query就算是完了


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM