一、概述

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对象相关推荐

  1. 【Lucene4.8教程之三】搜索

    1.关键类 Lucene的搜索过程中涉及的主要类有以下几个: (1)IndexSearcher:执行search()方法的类 (2)IndexReader:对索引文件进行读操作,并为IndexSear ...

  2. 【Lucene4.8教程之二】索引

    一.基础内容 0.官方文档说明 (1)org.apache.lucene.index provides two primary classes: IndexWriter, which creates ...

  3. 转载:【opencv入门教程之六】创建Trackbar图片对比度、亮度值调整

    [OpenCV入门教程之六] 创建Trackbar & 图像对比度.亮度值调整 浅墨_毛星云 2014-03-18 21:43:18 103746 收藏 21 最后发布:2014-03-18 ...

  4. 【Lucene4.8教程之一】使用Lucene4.8进行索引及搜索的基本操作

    在Lucene对文本进行处理的过程中,可以大致分为三大部分: 1.索引文件:提取文档内容并分析,生成索引 2.搜索内容:搜索索引内容,根据搜索关键字得出搜索结果 3.分析内容:对搜索词汇进行分析,生成 ...

  5. SAP UI5 应用开发教程之六十九 - 如何从 SAP UI5 Not Found 页面跳转回到正常的应用页面

    本系列的前一篇文章,我们学习了 SAP UI5 自定义 Not Found 页面的实现方式: SAP UI5 应用开发教程之六十八 - 如何实现 SAP UI5 路由失败时显示自定义的 NOT Fou ...

  6. SAP UI5 应用开发教程之六十七 - 基于 OData V4 的 SAP UI5 List-Detail(列表-明细)布局的实现方式试读版

    一套适合 SAP UI5 初学者循序渐进的学习教程 教程目录 SAP UI5 本地开发环境的搭建 SAP UI5 应用开发教程之一:Hello World SAP UI5 应用开发教程之二:SAP U ...

  7. SAP UI5 应用开发教程之六十六 - 基于 OData V4 的 SAP UI5 表格控件如何实现删除功能试读版

    一套适合 SAP UI5 初学者循序渐进的学习教程 教程目录 SAP UI5 本地开发环境的搭建 SAP UI5 应用开发教程之一:Hello World SAP UI5 应用开发教程之二:SAP U ...

  8. SAP UI5 应用开发教程之六十五 - 基于 OData V4 的 SAP UI5 表格控件如何实现创建,编辑和保存功能

    本教程前几个步骤,我们已经用 SAP UI5 table 控件开发了一个包含 User 列表的应用,并且支持了根据 LastName 字段进行查询,以及排序的操作. SAP UI5 应用开发教程之六十 ...

  9. SAP UI5 应用开发教程之六十四 - 基于 OData V4 的 SAP UI5 表格控件如何实现 filter(过滤) 和 sort(排序)功能试读版

    一套适合 SAP UI5 初学者循序渐进的学习教程 教程目录 SAP UI5 本地开发环境的搭建 SAP UI5 应用开发教程之一:Hello World SAP UI5 应用开发教程之二:SAP U ...

最新文章

  1. Windows热键注册(反汇编方法 查看win32api 原理)
  2. 饿了么交易系统应用架构演进
  3. 深入理解计算机底层为什么采用补码运算【如何理解二进制计算高位溢出】
  4. SpringMVC之源码分析--HandlerMapping(一)
  5. 七牛云注册创建oss并配置自定义域名
  6. SAP License:SAP中的容差
  7. Proxmark3教程1:小白如何用PM3破解复制M1全加密门禁IC卡
  8. 解决CentOS6.x或RedHat Linux 6.x版本不能通过System eth0以固定IP访问外网的问题
  9. 林森---博客园之二,对《闭包》的个人见解!希望能帮到不理解闭包的同学们!...
  10. 映射器配置文件和映射器接口
  11. python comprehensions_Python中的Comprehensions和Generations
  12. Atitit. 委托的本质 c#.net java php的比较
  13. tcpdump抓取无效TCP标志数据包表达式
  14. 【智能优化算法-蝙蝠算法】基于混合粒子群和蝙蝠算法求解单目标优化问题附matlab代码
  15. 【破解APP抓包限制】Xposed+JustTrustMe关闭SSL证书验证
  16. 阿里云服务器购买价格表:国内和国外地域云服务器活动报价表
  17. Ruby / Rails代码气味基础01
  18. python定时任务启动与停止_python定时任务最强框架APScheduler详细教程
  19. XFP模块和SFP光模块
  20. unity隐藏鼠标光标的2种方法

热门文章

  1. 【解题报告】Leecode 2057. 值相等的最小索引——Leecode周赛系列
  2. 深入理解input中的value、name、id的区别和用法——Web前端自学笔记
  3. 新手坐高铁怎么找车厢_京沪高铁设置静音车厢,你怎么看?
  4. ubuntu下gcc的安装与使用
  5. 纯C写Windows程序系列---------VS2010设置纯C环境 .
  6. vue3.0实现原理
  7. shell如何解决mysql交互式_shell脚本与mysql交互方法汇总
  8. tebluea 仪表板如何联动_报告厅音响设备和辅助设备.doc
  9. 华科计算机考研2022年分数线,2022年华中科技大学软件工程考研分数线、参考书、上岸前辈初复试经验...
  10. switch中case后可以是表达式吗_自学C++基础教程【流程控制语句】(switch语句 )...