【Lucene4.8教程之六】QueryParser与Query子类:如何生成Query对象

释放双眼,带上耳机,听听看~!

一、概述

1、对于一个搜索而言,其核心语句为:


1
2
1searcher.search(query, 10);
2

1
2
1此时,其最重要的参数为一个Qeury对象。构造一个Query对象有2种方法:  
2

(1)使用Query的子类创建一个对象。

(2)使用QueryParser.parse()创建一个对象。

常用的用于实例化一个对象的Query子类有以下13个:
TermQuery
BooleanQuery
WildcardQuery
PhraseQuery
PrefixQuery
MultiPhraseQuery
FuzzyQuery
RegexpQuery
TermRangeQuery
NumericRangeQuery
ConstantScoreQuery
DisjunctionMaxQuery
MatchAllDocsQuery

2、快速入门

【均以在contents域搜索java关键词为例】

(1)使用Query的子类,,直接实例化一个对外:


1
2
1searcher.search( new TermQuery(new Term("contents","java")), 10);
2

以下语句结构更为清晰


1
2
3
4
1Term term= new Term("contents","java");
2TermQuery tq = new TermQuery(term);
3searcher.search(tq , 10);
4

此外,即为在contents域中搜索包括java的文档。

(2)使用QueryParser的parse()方法,对所传入的搜索关键词汇进行解释,并返回query对象。


1
2
3
4
5
6
7
8
9
1QueryParser parser = new QueryParser(Version.LUCENE_48, "contents",new SimpleAnalyzer(Version.LUCENE_48));
2Query query = null;
3try {
4   query = parser.parse("java");
5} catch (ParseException e) {
6   e.printStackTrace();
7}
8TopDocs docs = searcher.search(query, 10);
9

1
2
1以上语句创建一个QueryParser,其默认搜索域为contents,然后将搜索词汇转化为Query对象。
2

如果指定QueryParser的默认搜索域为全部?如何指定一个Query的搜索域?

二、TermQuery

1、创建方式

上述快速入门中使用的就是TermQuery。

2、适用范围

(1)直接使用TermQuery,不对搜索词作任何的分析,包括大小写都不作转换,而使用QueryParser,则可以根据Analyzer的类型作分析。

(2)TermQuery适合使用于完全匹配的搜索,如搜索id号,二维码,姓名等。

三、BooleanQuery

1、创建方式

(1)使用BooleanQuery

多个搜索条件组成BooleanQuey对象,以后补充例子。

(2)使用QueryParser

对于一个QueryParser,若其未指定是何种逻辑操作,则其将默认为Operator.OR。因此,若搜索 java web,则其会认为java OR web。

而对于中文,使用StandartAnalyzer分析器时,会将每个字作为一个词汇。如搜索“学习”,则搜索“学 OR 习”。

因此,为指定搜索“学习”或者'java web"等,必须显示指定逻辑操作为Operator.AND。


1
2
3
4
5
1QueryParser parser = new QueryParser(Version.LUCENE_48, "contents",
2               new StandardAnalyzer(Version.LUCENE_48));
3parser.setDefaultOperator(Operator.AND);
4Query query  = parser.parse(term);
5

1
2
1 2、适用范围
2

(1)BooleanQuery方式,由于需要将搜索内容生成多个Query对象,再进行逻辑组合,因此,只适用于根据多个搜索条件进行搜索的情形。如:

   

在上述页面选择多个筛选条件,然后,每个筛选条件生成一个Query对象,再将各个Query对象进行逻辑组合。

(2)QueryParser方式,适用于单一搜索框,使用自然语言进行搜索的情形。如google,百度等搜索框。

四、PhraseQuery

1、简单说明

在使用双引号将搜索关键字括起来,则将搜索关键词作为一个整体的短语进行搜索。如:

前者只有534个返回结果,后者有200多万返回结果。对于前者,将会搜索java 和sunshine之间的距离少于一个特定的slop值的文档。

转载于:https://www.cnblogs.com/jinhong-lu/p/4559442.html

给TA打赏
共{{data.count}}人
人已打赏
安全运维

OpenSSH-8.7p1离线升级修复安全漏洞

2021-10-23 10:13:25

安全运维

设计模式的设计原则

2021-12-12 17:36:11

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索