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就算是完了

posted @ 2016-08-10 16:50  小祥工作室  阅读(7056)  评论(0编辑  收藏  举报