【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教程之六】QueryParser与Query子类:怎样生成Query对象
版权声明:本文为博主原创文章.转载请注明来自http://blog.csdn.net/jediael_lu/ https://blog.csdn.net/jediael_lu/article/deta ...
- 【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#编写) 在第二个教程中,我们学习 ...
随机推荐
- Ubuntu 安装 pecl_http
由于开发环境需要用到pecl_http,根据网上找的教程一直没用按照成功,查看错误,pcre这里出错了,原来要安装这个libpcre3-dev,安装好这个就成功了,记下命令. $ sudo apt-g ...
- python成长之路第三篇(4)_作用域,递归,模块,内置模块(os,ConfigParser,hashlib),with文件操作
打个广告欢迎加入linux,python资源分享群群号:478616847 目录: 1.作用域 2.递归 3.模块介绍 4.内置模块-OS 5.内置模块-ConfigParser 6.内置模块-has ...
- Pseudoprime numbers(POJ 3641 快速幂)
#include <cstring> #include <cstdio> #include <iostream> #include <cmath> #i ...
- linux修改文件权限
ubuntu 下修改文件访问权限 Ubuntu下修改目录权限命令如下: chmod 600 name (只有所有者有读和写的权限) chmod 644 name (所有者有读和写的权限,组用户只有读的 ...
- WPF控件中可以用来记录数据用的属性总结
今天遇到一个问题需要为每个控件tooltip根据不同情况显示多组数据,于是需要用到控件的某个属性暂存这个数据.好吧,现在我找到了3个属性可用,给自己做个备忘. 1.Tag 这个属性是object类型 ...
- Java 舍入模式 数字的格式化
舍入模式: UP向远离0的方向舍入 始终对非零舍弃部分前面的数字加 1.此舍入模式始终不会减少计算值的绝对值. 例如:1.6 → 2 -1.6 → -2 1.1 → 2 ...
- vector迭代器失效的一种情形
使用过STL的人都应该知道关于迭代器失效的原理,这里以后vector迭代器失效为例: 第一种:当插入一个元素到vector中,如果插入后容器已满,那么容器将新开辟一块内存区域,然后 将原内存中的数据拷 ...
- python刷取CSDN博文访问量之二
python刷取CSDN博文访问量之二 作者:vpoet 注:这个系列我只贴代码,代码不注释.有兴趣的自己读读就懂了,纯属娱乐,望管理员抬手 若有转载一定不要注明来源 #coding=utf ...
- Java Base64编码与图片互转
import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import ...
- Spring的AOP1
引用:http://my.oschina.net/huangyong/blog/161338 是一个周末,刚给宝宝喂完牛奶,终于让她睡着了.所以现在我才能腾出手来,坐在电脑面前给大家写这篇文章. 今天 ...