【Lucene4.8教程之六】QueryParser与Query子类:怎样生成Query对象
版权声明:本文为博主原创文章。转载请注明来自http://blog.csdn.net/jediael_lu/ https://blog.csdn.net/jediael_lu/article/details/33288793
一、概述
1、对于一个搜索而言,其核心语句为:
searcher.search(query, 10);
此时,其最重要的參数为一个Qeury对象。构造一个Query对象有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的子类。。直接实例化一个对外:
searcher.search( new TermQuery(new Term("contents","java")), 10);
下面语句结构更为清晰
Term term= new Term("contents","java");
TermQuery tq = new TermQuery(term);
searcher.search(tq , 10);
此外。即为在contents域中搜索包含java的文档。
(2)使用QueryParser的parse()方法,对所传入的搜索关键词汇进行解释,并返回query对象。
QueryParser parser = new QueryParser(Version.LUCENE_48, "contents",new SimpleAnalyzer(Version.LUCENE_48));
Query query = null;
try {
query = parser.parse("java");
} catch (ParseException e) {
e.printStackTrace();
}
TopDocs docs = searcher.search(query, 10);
以上语句创建一个QueryParser,其默认搜索域为contents,然后将搜索词汇转化为Query对象。
假设指定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。
QueryParser parser = new QueryParser(Version.LUCENE_48, "contents",
new StandardAnalyzer(Version.LUCENE_48));
parser.setDefaultOperator(Operator.AND);
Query query = parser.parse(term);
2、适用范围
(1)BooleanQuery方式。因为须要将搜索内容生成多个Query对象,再进行逻辑组合。因此,仅仅适用于依据多个搜索条件进行搜索的情形。
如:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvamVkaWFlbF9sdQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
在上述页面选择多个筛选条件,然后。每一个筛选条件生成一个Query对象,再将各个Query对象进行逻辑组合。
(2)QueryParser方式。适用于单一搜索框,使用自然语言进行搜索的情形。如google,百度等搜索框。
四、PhraseQuery
1、简单说明
在使用双引號将搜索keyword括起来,则将搜索关键词作为一个总体的短语进行搜索。如:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvamVkaWFlbF9sdQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
前者仅仅有534个返回结果,后者有200多万返回结果。对于前者,将会搜索java 和sunshine之间的距离少于一个特定的slop值的文档。
【Lucene4.8教程之六】QueryParser与Query子类:怎样生成Query对象的更多相关文章
- 【Lucene4.8教程之六】QueryParser与Query子类:如何生成Query对象
一.概述 1.对于一个搜索而言,其核心语句为: searcher.search(query, 10); 此时,其最重要的参数为一个Qeury对象.构造一个Query对象有2种方法: (1)使用Quer ...
- 【Lucene4.8教程之三】搜索
1.关键类 Lucene的搜索过程中涉及的主要类有以下几个: (1)IndexSearcher:执行search()方法的类 (2)IndexReader:对索引文件进行读操作,并为IndexSear ...
- 【Lucene4.8教程之三】搜索 2014-06-21 09:53 1532人阅读 评论(0) 收藏
1.关键类 Lucene的搜索过程中涉及的主要类有以下几个: (1)IndexSearcher:执行search()方法的类 (2)IndexReader:对索引文件进行读操作,并为IndexSear ...
- 【Lucene4.8教程之二】索引
一.基础内容 0.官方文档说明 (1)org.apache.lucene.index provides two primary classes: IndexWriter, which creates ...
- 【Lucene4.8教程之二】索引 2014-06-16 11:30 3845人阅读 评论(0) 收藏
一.基础内容 0.官方文档说明 (1)org.apache.lucene.index provides two primary classes: IndexWriter, which creates ...
- 【Lucene4.8教程之一】使用Lucene4.8进行索引及搜索的基本操作
在Lucene对文本进行处理的过程中,可以大致分为三大部分: 1.索引文件:提取文档内容并分析,生成索引 2.搜索内容:搜索索引内容,根据搜索关键字得出搜索结果 3.分析内容:对搜索词汇进行分析,生成 ...
- opencv ,亮度调整【【OpenCV入门教程之六】 创建Trackbar & 图像对比度、亮度值调整
http://blog.csdn.net/poem_qianmo/article/details/21479533 [OpenCV入门教程之六] 创建Trackbar & 图像对比度.亮度值调 ...
- 【Lucene4.8教程之中的一个】使用Lucene4.8进行索引及搜索的基本操作
版权声明:本文为博主原创文章.转载请注明来自http://blog.csdn.net/jediael_lu/ https://blog.csdn.net/jediael_lu/article/deta ...
- RabbitMQ系列教程之六:远程过程调用(RPC)(转载)
RabbitMQ系列教程之六:远程过程调用(RPC) 远程过程调用(Remote Proceddure call[RPC]) (本实例都是使用的Net的客户端,使用C#编写) 在第二个教程中,我们学习 ...
随机推荐
- Debug模式下,测试app后缀名“-测试”
target-->buildsetting-->user-defined 新建一个和上图尖括号一样的字符 如下图: 在debug中填入后缀名,然后在debug模式下运行程序,会发现debu ...
- IDEA Tomcat Web项目修改了代码,重新部署页面没改变
今天被IDEA坑的不浅直接说一下问题: 这是html页面不管我怎么修改重启服务器在浏览器中还是一点都不变化,甚至把一些内容都删了都没有变化,target可执行文件是最新的没问题,找了点资料发现是浏览器 ...
- Springmvx拦截html出现406解决以及Server Tomcat v8.0 Server at localhost failed to start 问题解决方法
问题是这样的:环境是SSM框架,在配置好的框架里想请求一个html,结果406了,406就是HTTP协议状态码的一种,表示无法使用请求的特性来响应请求的网页.一般指客户端浏览器不接受所请求页面的MIM ...
- postgreSQL数据库的监控及数据维护
目前postgreSQL数据库的管理,数据查询等都需要安装postgreSQL软件或安装pgadmin等,远程访问都需要先登录到服务器等繁琐的操作.如果是开发团队,那么每个开发,测试,管理人员都要经历 ...
- Docker入门及基本指令
Docker概念 Docker就相当于一个Github账号,不过最开始的工程不能自己建立,要从DockerHub这个中央仓库pull过来,这个工程Docker称之为image,这个image竟然是个l ...
- linux系统编程:自己动手写一个pwd命令
pwd命令:打印当前的工作目录 我们都知道每个目录下面都有两个特殊的目录( . 和 .. ), .: 当前目录, ..: 上层目录, 每个目录都有一个i节点与之相关联 ghostwu@ubuntu: ...
- HDU4417(SummerTrainingDay08-N 主席树)
Super Mario Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- Codeforces729D(SummerTrainingDay01-F)
D. Sea Battle time limit per test 1 second memory limit per test 256 megabytes input standard input ...
- DataTable的数据或表结构复制
把datatable的结构全部数据或部分数据复制到一个新的datatabledatatable复制表结构:我们可以使用.clone()方法: DataTable oldDT = GetDataTabl ...
- npm包管理工具在一般项目中的应用方法
最近自己在有时间,在通学一些知识点,记录一下,以便以后使用方面 当我们在做项目的时候,如果需要到包管理工具,那么我们一定会经历以下流程: 1.首先在官网下载node.js,然后默认安装到C盘 检查是否 ...