[Lucene]Lucene 学习笔记(二)——搜索方式(一)

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

赞(0) 打赏
分享到: 更多 (0)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏