lucene-查询query->QueryParser
对于搜索引擎(比如Google和百度)来讲,很多情况下只需要用户在输入框内输入所需查询的内容,然后再单击“搜索”就可以了,其余的事情全部交给搜索引擎去处理,最后搜索引擎会把检索到的结果显示出来。那么搜索引擎是怎样处理用户输入得符号串的呢?
在Lucene中,这项工作就交给了QueryParser类来完成,它的作用就是把各种用户输入的符号串转为一个内部的Query或者一个Query组。虽然Lucene提供的API允许使用者创建各种各样的Query(查询语句),但它同时也允许通过QueryParser(查询分析器)生成各种各样的Query子对象。这使得Lucene的查询功能更加灵活和强大。
QueryParser实际上就是一个解析用户输入的工具,可以通过扫描用户输入的字符串,生成Query对象,以下是一个代码示例:
Query query = null; query = QueryParser.parse(keywords,fieldName,new StandardAnalyzer());
由上面代码可以看出,当使用QueryParser构建用户Query时,不仅需要用户输入关键字文本,还需要告诉QueryParser默认将在哪个字段内查找该关键字信息。当然,这并不是说用户只能在这个字段内查找关键字信息(例如可以在关键字中使用“content:david”这样的方式指定搜索字段“content”中的关键字),但是如果用户在输入的关键字中没有给出检索字段信息时,QueryParser就将在默认字段内进行检索。
用户输入关键字的格式以及QueryParser所理解的含义如表所示。
|
格 式 |
含 义 |
|
“David” |
在默认的字段中检索“David”关键字 |
|
“content:David” |
在“content”字段中检索“David”关键字 |
|
“David Mary”或“David OR Mary” |
在默认字段中检索David和Mary关键字,它们是“或”关系 |
|
“+David +Mary”或“David AND Mary” |
在默认字段中检索David和Mary关键字,它们是“与”关系 |
|
“content:David –title:Manager”或“content:David AND NOT title:Manager” |
在content字段中包括关键字David但在title字段中不包含关键字Manager |
|
“(David OR Mary) AND Robert” |
在默认字段中包含David或Mary关键字,但一定要包含Robert关键字 |
|
Davi* |
在默认字段中检索前缀为Davi |
|
“content:"David is a manager"” |
在“content”字段中包含短语“David is a manager” |
另外很重要的一点,就是在使用QueryParser对用户的输入进行扫描时,还需要给它一个分析器。有关分析器的概念将在后面的章节中介绍。不过,当对用户输入的关键字进行分析时的分析器应当与建立索引时的分析器一样,这样才能保证分析成功。
QueryParser的“与”和“或”
通过表11-1可以了解,当用户输入两个关键字时,QueryParser默认它们之间的关系为“或”关系。如果用户需要改变这种逻辑关系,则可采用下面的方法:
QueryParser parser = new QueryParser(fieldName, new StandardAnalyzer()); parser.setOperator(QueryParser.DEFAULT_OPERATOR_AND);
这样构建的QueryParser实例在对用户输入进行扫描时,就会用空格分开的关键字理解为“与”,其实也就是构建了一个“与”关系的布尔型查询。
lucene-查询query->QueryParser的更多相关文章
- Lucene 查询(Query)子类
QueryParser(单域查询) QueryParser子类对单个域查询时创建查询query,构造方法中需要传入Lucene版本号,检索域名和分词器. QueryParser parser = ne ...
- lucene查询索引之QueryParser解析查询——(八)
0.语法介绍:
- Lucene查询索引(分页)
分页查询只需传入每页显示记录数和当前页就可以实现分页查询功能 Lucene分页查询是对搜索返回的结果进行分页,而不是对搜索结果的总数量进行分页,因此我们搜索的时候都是返回前n条记录 package c ...
- 第六步:Lucene查询索引(优化一)
package cn.harmel.lucene; import java.io.IOException; import java.nio.file.Paths; import org.apache. ...
- 第六步:Lucene查询索引
package cn.harmel.lucene; import java.io.IOException; import java.nio.file.Paths; import org.apache. ...
- lucene 查询的使用
各种查询方式一:使用QueryParser与查询语法.(会使用分词器) MultiFieldQueryParser查询字符串 ------------------------> Query对象 ...
- Lucene自定义扩展QueryParser
Lucene版本:4.10.2 在使用lucene的时候,不可避免的需要扩展lucene的相关功能来实现业务的需要,比如搜索时,需要在满足一个特定范围内的document进行搜索,如年龄在20和30岁 ...
- lucene 查询 (转载)
原网址:http://hi.baidu.com/lszhuhaichao/blog/item/ccffc7cb858f1514bf09e66f.html Lucene3.0之查询处理(1):原理201 ...
- Lucene查询结果高亮
检索结果高亮 实现效果: 核心代码 package ucas.ir.lucene; import java.io.File; import java.io.IOException; import ja ...
- Lucene查询索引
索引创建 以新闻文档为例,每条新闻是一个document,新闻有news_id.news_title.news_source.news_url.news_abstract.news_keywords这 ...
随机推荐
- nginx 入门
1.nginx 如何处理一个请求 IP,域名的处理 server { listen 80 default_server; //添加 default_server就是一个默认的server ...
- JavaScript Math 对象
JavaScript Math 对象 Math 对象 Math 对象用于执行数学任务. Math 对象并不像 Date 和 String 那样是对象的类,因此没有构造函数 Math(). 语法 var ...
- (原创)mybatis学习四,利用mybatis自动创建代码
在使用mybatis的过程中,我们可以直接利用MyBatis生成器自动生成实体类.DAO接口和Mapping映射文件,然后copy到工程中即可 需要的jar包如下 下载路径如下:下载jar包 其中的g ...
- 启动PPT的时候一直配置vs2013的问题解决
前几天装了VS2013,结果发现每次启动powerpoint都要配置vs2013,虽然时间花的不多,可我看的就是碍眼,我都想把VS2013卸载来解决了.后来抱着试下的态度竟然在google上找到了解决 ...
- hadoop资料收集
大数据时代——为什么用hadoop hadoop应用场景 Hadoop一般用在哪些业务场景? Hadoop虽然强大,但不是万能的
- CodeDom
细说CodeDom 在上一篇文章中,老周厚着脸皮给大伙介绍了代码文档的基本结构,以及一些代码对象与CodeDom类型的对应关系. 在评论中老周看到有朋友提到了 Emit,那老周就顺便提一下.严格上说, ...
- 2013级软件工程GitHub账号信息
GitHub账号信息 序号 班级 学号 姓名 个人GitHub网址 1 信1301-1班 20122951 刘伟 https://github.com/weige8882 2 信1301-1班 201 ...
- 数据字典生成工具之旅(3):PowerDesign文件组成结构介绍及操作
从这篇开始将正式讲解整个重要部分的实现细节,本篇讲解Pdm文件的解析.其实PDM文件就是XML文件,可以用Editplus或者VS打开查看.了解到这一点之后大家就能猜到,可以用解析XML的方式读取PD ...
- IntelliJ IDEA,代码行宽度超出限制时自动换行
转自:http://my.oschina.net/angerbaby/blog/471351 当我们使用IDE写代码时,为了保证代码的可阅读性和优雅性,通常会借助IDE的代码风格设置功能,令IDE智能 ...
- js单选和复选框
http://blog.csdn.net/chelen_jak/article/details/44827393 http://www.gbtags.com/technology/jquerynews ...