看完圖之后在來詳細說明一下。
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就算是完了