• lucene搜索方式(query类型)


    Lucene有多种搜索方式,可以根据需要选择不同的方式。

    1、词条搜索(单个关键字查找)

         主要对象是TermQuery

         调用方式如下:

     
    Term term=new Term(字段名,搜索关键字);
    Query query=new TermQuery(term);
    Hits hits=searcher.search(query);
     

    2、组合搜索(允许多个关键字组合搜索)

         主要对象是BooleanQuery

         调用方式如下:

     
    Term term1=new Term(字段名,搜索关键字);
    TermQuery query1=new TermQuery(term1);

    Term term2=new Term(字段名,搜索关键字);
    TermQuery query2=new TermQuery(term2);

    BooleanQuery booleanquery=new BooleanQuery();
    booleanquery.add(query1,参数)
    booleanquery.add(query2,参数)

    Hits hits=searcher.search(booleanquery);
    此方法中的核心在BooleanQuery的add方法上,其第二个参数有三个可选值,对应着逻辑上的与或非关系

    参数如下:

    BooleanClause.Occur.MUST                必须包含,类似于逻辑运算的与

    BooleanClause.Occur.MUST _NOT       必须不包含,类似于逻辑运算的非

    BooleanClause.Occur.SHOULD           可以包含,类似于逻辑运算的或

    这三者组合,妙用无穷。

    3、范围搜索(允许搜索指定范围内的关键字结果)

         主要对象是RangeQuery

         调用方式如下:

     
    Term term1=new Term(字段名,起始值);

    Term term2=new Term(字段名,终止值);

    RangeQuery rangequery=new RangeQuery(term1,term2,参数);

    Hits hits=searcher.search(rangequery);
    此方法中的参数是Boolean类型的,表示是否包含边界 。

    true 包含边界

    false不包含边界


     

    4、前缀搜索(搜索起始位置符合要求的结果)

         主要对象是PrefixQuery

         调用方式如下:

     
    Term term=new Term(字段名,搜索关键字);
    PrefixQuery prefixquery=new PrefixQuery (term);
    Hits hits=searcher.search(prefixquery);
     

    5、短语搜索(根据零碎的短语组合成新的词组进行搜索)

         主要对象是PhraseQuery

         调用方式如下:

    Term term1=new Term(字段名,搜索关键字);
    Term term2=new Term(字段名,搜索关键字);

    PhraseQuery phrasequery=new PhraseQuery();
    phrasequery.setSlop(参数);
    phrasequery.add(term1);
    phrasequery.add(term2);
    Hits hits=searcher.search(phrasequery);
    其中setSlop的参数是设置两个关键字之间允许间隔的最大值。

    6、多短语搜索(先指定一个前缀关键字,然后讲其他的关键字加在此关键字之后,组成词语进行搜索)

         主要对象是:MultiPhraseQuery

         调用方式如下:

     
    Term term=new Term(字段名,前置关键字);
    Term term1=new Term(字段名,搜索关键字);
    Term term2=new Term(字段名,搜索关键字);


    MultiPhraseQuery multiphrasequery=new MultiPhraseQuery();

    multiphrasequery.add(term);
    multiphrasequery.add(new Term[]{term1,term2});

    Hits hits=searcher.search(multiphrasequery);
     

    7、模糊搜索(顾名思义)

         主要对象是:FuzzyQuery

         调用方式如下:

     
    Term term=new Term(字段名,搜索关键字);
    FuzzyQuery fuzzyquery=new FuzzyQuery (term,参数);
    Hits hits=searcher.search(fuzzyquery);
    此中的参数是表示模糊度,是小于1的浮点小数,比如0.5f

    8、通配符搜索(顾名思义)

         主要对象是:WildcardQuery

         调用方式如下:

     
    Term term=new Term(字段名,搜索关键字+通配符);
    WildcardQuery wildcardquery=new WildcardQuery (term);
    Hits hits=searcher.search(wildcardquery);
     

    其中的通配符分两种,即*和?

    * 表示任意多的自负

    ?表示任意一个字符

    9、正则表达式搜索(顾名思义)

         主要对象是:RegexQuery

         调用方式如下:www.2cto.com

    Lucene 搜索种类很多。这里就介绍几个最常用的。其中TermQueryBooleanQueryRegexQuery功能最强大,最为常用。

    作者:wyq_wzw

    http://www.2cto.com/kf/201207/140701.html

  • 相关阅读:
    上传文件,经过Zuul,中文文件名乱码解决办法
    Spring Cloud Sleuth进阶实战
    如何在IDEA启动多个Spring Boot工程实例
    深入理解Zuul之源码解析
    深入理解Hystrix之文档翻译
    Spring 之BeanFactory(转)
    spring之BeanFactoryAware接口
    ExecutorService线程池
    POJO
    newInstance 与new的区别
  • 原文地址:https://www.cnblogs.com/apem/p/3914494.html
Copyright © 2020-2023  润新知