zoukankan      html  css  js  c++  java
  • 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就算是完了

  • 相关阅读:
    最能激怒程序猿的十句话()
    程序员是如何被外行给逼疯的?
    Linux 平台安装Oracle Database 12c
    替代恐慌你有吗?程序员会被深度学习技术淘汰吗?
    1006 换个格式输出整数 (15 分)C语言
    1021 个位数统计 (15 分)C语言
    1010 一元多项式求导 (25 分)C语言
    1009 说反话 (20 分)C语言
    1008 数组元素循环右移问题 (20 分)C语言
    1056 组合数的和 (15 分)C语言
  • 原文地址:https://www.cnblogs.com/wangxiangstudy/p/5757408.html
Copyright © 2011-2022 走看看