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

  • 相关阅读:
    sqlserver中实现split分割字符串函数
    Sqlserver判断对象是否存在
    C#学习笔记(十):阴影和深度复制 [转]
    C#企业库自定义连接字符串.
    Jquery error 事件
    SQLserver不是可以识别的内置函数名称"的错误,通过set statistics time on能得到SQL语句的执行时间精确到毫秒.
    C#学习笔记(九):c#运算符重载.[简单理解]
    利用sql语句添加字段注释
    如何抓取google的搜索结果?
    SQL SERVER级联删除的简单实现方法
  • 原文地址:https://www.cnblogs.com/wangxiangstudy/p/5757408.html
Copyright © 2020-2023  润新知