【Lucene4.8教程之六】QueryParser与Query子类:如何生成Query对象
一、概述
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对象,再进行逻辑组合,因此,只适用于根据多个搜索条件进行搜索的情形。如:
在上述页面选择多个筛选条件,然后,每个筛选条件生成一个Query对象,再将各个Query对象进行逻辑组合。
(2)QueryParser方式,适用于单一搜索框,使用自然语言进行搜索的情形。如google,百度等搜索框。
四、PhraseQuery
1、简单说明
在使用双引号将搜索关键字括起来,则将搜索关键词作为一个整体的短语进行搜索。如:
前者只有534个返回结果,后者有200多万返回结果。对于前者,将会搜索java 和sunshine之间的距离少于一个特定的slop值的文档。
【Lucene4.8教程之六】QueryParser与Query子类:如何生成Query对象相关推荐
- 【Lucene4.8教程之三】搜索
1.关键类 Lucene的搜索过程中涉及的主要类有以下几个: (1)IndexSearcher:执行search()方法的类 (2)IndexReader:对索引文件进行读操作,并为IndexSear ...
- 【Lucene4.8教程之二】索引
一.基础内容 0.官方文档说明 (1)org.apache.lucene.index provides two primary classes: IndexWriter, which creates ...
- 转载:【opencv入门教程之六】创建Trackbar图片对比度、亮度值调整
[OpenCV入门教程之六] 创建Trackbar & 图像对比度.亮度值调整 浅墨_毛星云 2014-03-18 21:43:18 103746 收藏 21 最后发布:2014-03-18 ...
- 【Lucene4.8教程之一】使用Lucene4.8进行索引及搜索的基本操作
在Lucene对文本进行处理的过程中,可以大致分为三大部分: 1.索引文件:提取文档内容并分析,生成索引 2.搜索内容:搜索索引内容,根据搜索关键字得出搜索结果 3.分析内容:对搜索词汇进行分析,生成 ...
- SAP UI5 应用开发教程之六十九 - 如何从 SAP UI5 Not Found 页面跳转回到正常的应用页面
本系列的前一篇文章,我们学习了 SAP UI5 自定义 Not Found 页面的实现方式: SAP UI5 应用开发教程之六十八 - 如何实现 SAP UI5 路由失败时显示自定义的 NOT Fou ...
- SAP UI5 应用开发教程之六十七 - 基于 OData V4 的 SAP UI5 List-Detail(列表-明细)布局的实现方式试读版
一套适合 SAP UI5 初学者循序渐进的学习教程 教程目录 SAP UI5 本地开发环境的搭建 SAP UI5 应用开发教程之一:Hello World SAP UI5 应用开发教程之二:SAP U ...
- SAP UI5 应用开发教程之六十六 - 基于 OData V4 的 SAP UI5 表格控件如何实现删除功能试读版
一套适合 SAP UI5 初学者循序渐进的学习教程 教程目录 SAP UI5 本地开发环境的搭建 SAP UI5 应用开发教程之一:Hello World SAP UI5 应用开发教程之二:SAP U ...
- SAP UI5 应用开发教程之六十五 - 基于 OData V4 的 SAP UI5 表格控件如何实现创建,编辑和保存功能
本教程前几个步骤,我们已经用 SAP UI5 table 控件开发了一个包含 User 列表的应用,并且支持了根据 LastName 字段进行查询,以及排序的操作. SAP UI5 应用开发教程之六十 ...
- SAP UI5 应用开发教程之六十四 - 基于 OData V4 的 SAP UI5 表格控件如何实现 filter(过滤) 和 sort(排序)功能试读版
一套适合 SAP UI5 初学者循序渐进的学习教程 教程目录 SAP UI5 本地开发环境的搭建 SAP UI5 应用开发教程之一:Hello World SAP UI5 应用开发教程之二:SAP U ...
最新文章
- Windows热键注册(反汇编方法 查看win32api 原理)
- 饿了么交易系统应用架构演进
- 深入理解计算机底层为什么采用补码运算【如何理解二进制计算高位溢出】
- SpringMVC之源码分析--HandlerMapping(一)
- 七牛云注册创建oss并配置自定义域名
- SAP License:SAP中的容差
- Proxmark3教程1:小白如何用PM3破解复制M1全加密门禁IC卡
- 解决CentOS6.x或RedHat Linux 6.x版本不能通过System eth0以固定IP访问外网的问题
- 林森---博客园之二,对《闭包》的个人见解!希望能帮到不理解闭包的同学们!...
- 映射器配置文件和映射器接口
- python comprehensions_Python中的Comprehensions和Generations
- Atitit. 委托的本质 c#.net java php的比较
- tcpdump抓取无效TCP标志数据包表达式
- 【智能优化算法-蝙蝠算法】基于混合粒子群和蝙蝠算法求解单目标优化问题附matlab代码
- 【破解APP抓包限制】Xposed+JustTrustMe关闭SSL证书验证
- 阿里云服务器购买价格表:国内和国外地域云服务器活动报价表
- Ruby / Rails代码气味基础01
- python定时任务启动与停止_python定时任务最强框架APScheduler详细教程
- XFP模块和SFP光模块
- unity隐藏鼠标光标的2种方法
热门文章
- 【解题报告】Leecode 2057. 值相等的最小索引——Leecode周赛系列
- 深入理解input中的value、name、id的区别和用法——Web前端自学笔记
- 新手坐高铁怎么找车厢_京沪高铁设置静音车厢,你怎么看?
- ubuntu下gcc的安装与使用
- 纯C写Windows程序系列---------VS2010设置纯C环境 .
- vue3.0实现原理
- shell如何解决mysql交互式_shell脚本与mysql交互方法汇总
- tebluea 仪表板如何联动_报告厅音响设备和辅助设备.doc
- 华科计算机考研2022年分数线,2022年华中科技大学软件工程考研分数线、参考书、上岸前辈初复试经验...
- switch中case后可以是表达式吗_自学C++基础教程【流程控制语句】(switch语句 )...