博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Lucene:Query
阅读量:7031 次
发布时间:2019-06-28

本文共 2434 字,大约阅读时间需要 8 分钟。

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

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

   主要对象是TermQuery

   调用方式如下:

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

 

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

   主要对象是BooleanQuery

   调用方式如下:

1 Term term1=new Term(字段名,搜索关键字); 2 TermQuery query1=new TermQuery(term1); 3   4 Term term2=new Term(字段名,搜索关键字); 5 TermQuery query2=new TermQuery(term2); 6   7 BooleanQuery booleanquery=new BooleanQuery(); 8 booleanquery.add(query1,参数) 9 booleanquery.add(query2,参数)10  11 Hits hits=searcher.search(booleanquery);

 

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

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

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

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

这三者组合,妙用无穷。

 

 

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

   主要对象是RangeQuery

   调用方式如下:

1 Term term1=new Term(字段名,起始值);2 Term term2=new Term(字段名,终止值);3 RangeQuery rangequery=new RangeQuery(term1,term2,参数);4 Hits hits=searcher.search(rangequery);5

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

true 包含边界

false不包含边界

 

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

   主要对象是PrefixQuery

   调用方式如下:

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

 

 

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

   主要对象是PhraseQuery

   调用方式如下:

1 Term term1=new Term(字段名,搜索关键字);2 Term term2=new Term(字段名,搜索关键字);3  4 PhraseQuery phrasequery=new PhraseQuery();5 phrasequery.setSlop(参数);6 phrasequery.add(term1);7 phrasequery.add(term2);8 Hits hits=searcher.search(phrasequery);

其中setSlop的参数是设置两个关键字之间允许间隔的最大值。

 

 

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

   主要对象是:MultiPhraseQuery

   调用方式如下:

1 Term term=new Term(字段名,前置关键字); 2 Term term1=new Term(字段名,搜索关键字); 3 Term term2=new Term(字段名,搜索关键字); 4  5 MultiPhraseQuery multiphrasequery=new MultiPhraseQuery(); 6   7 multiphrasequery.add(term); 8 multiphrasequery.add(new Term[]{term1,term2}); 9  10 Hits hits=searcher.search(multiphrasequery);

 

 

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

   主要对象是:FuzzyQuery

   调用方式如下:

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

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

 

 

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

   主要对象是:WildcardQuery

   调用方式如下:

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

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

* 表示任意多的自负

?表示任意一个字符

 

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

   主要对象是:RegexQuery

 

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

 

转载于:https://www.cnblogs.com/bluepoint2009/archive/2012/10/08/Lucene-query.html

你可能感兴趣的文章
badboy使用手册
查看>>
React从0到1--组件向外传递数据
查看>>
hausaufgabe--python 12-List comprehensions
查看>>
哈哈更新资源列表2
查看>>
文本的四种编码方式
查看>>
Capitals of different countries
查看>>
sql server 2000数据库备份文件还原成sql server 2005 /2008
查看>>
哈希表及冲突的方法
查看>>
iOS开发UI篇—简单的浏览器查看程序
查看>>
iOS开发网络篇—搭建本地服务器
查看>>
window 安装redis、memcache的php扩展和 reidis 、memcache 及 reids管理软件
查看>>
JOSN转列格式(csv文件)
查看>>
役物,役于物
查看>>
远程桌面连接树莓派
查看>>
技术人员白手起家,创业路。
查看>>
回忆录
查看>>
QQ能上,网页打不开
查看>>
违章处理-违章查询
查看>>
Docker Hub.拉取镜像
查看>>
G.729 之固定编码
查看>>