lucene搜索方式(query类型)

Lucene有多种搜索方式,能够根据须要选择不一样的方式。正则表达式

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

     主要对象是TermQuery对象

     调用方式以下:ip

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

 

二、组合搜索(容许多个关键字组合搜索)搜索

     主要对象是BooleanQuery方法

     调用方式以下:im

 


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);
top

此方法中的核心在BooleanQuery的add方法上,其第二个参数有三个可选值,对应着逻辑上的与或非关系img

参数以下:

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

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

BooleanClause.Occur.SHOULD           能够包含,相似于逻辑运算的或

这三者组合,妙用无穷。

 

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

     主要对象是RangeQuery

     调用方式以下: 

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

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

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

Hits hits
=searcher.search(rangequery);

此方法中的参数是Boolean类型的,表示是否包含边界 。

true 包含边界

false不包含边界


 

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

     主要对象是PrefixQuery

     调用方式以下:

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

 

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

     主要对象是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的参数是设置两个关键字之间容许间隔的最大值。

六、多短语搜索(先指定一个前缀关键字,而后讲其余的关键字加在此关键字以后,组成词语进行搜索)

     主要对象是: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);

 

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

     主要对象是:FuzzyQuery

     调用方式以下:

 

Term term=new Term(字段名,搜索关键字);
FuzzyQuery fuzzyquery
=new FuzzyQuery (term,参数);
Hits hits
=searcher.search(fuzzyquery);

此中的参数是表示模糊度,是小于1的浮点小数,好比0.5f

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

     主要对象是:WildcardQuery

     调用方式以下: 


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

 

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

* 表示任意多的自负

?表示任意一个字符

 

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

     主要对象是:RegexQuery

     调用方式以下: 

 

Lucene 搜索种类不少。这里就介绍几个最经常使用的。其中TermQuery\BooleanQuery\RegexQuery功能最强大,最为经常使用。

相关文章
相关标签/搜索