版权声明:本文为博主原创文章。转载请注明来自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对象的更多相关文章

  1. 【Lucene4.8教程之六】QueryParser与Query子类:如何生成Query对象

    一.概述 1.对于一个搜索而言,其核心语句为: searcher.search(query, 10); 此时,其最重要的参数为一个Qeury对象.构造一个Query对象有2种方法: (1)使用Quer ...

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

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

  3. 【Lucene4.8教程之三】搜索 2014-06-21 09:53 1532人阅读 评论(0) 收藏

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

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

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

  5. 【Lucene4.8教程之二】索引 2014-06-16 11:30 3845人阅读 评论(0) 收藏

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

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

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

  7. opencv ,亮度调整【【OpenCV入门教程之六】 创建Trackbar & 图像对比度、亮度值调整

    http://blog.csdn.net/poem_qianmo/article/details/21479533 [OpenCV入门教程之六] 创建Trackbar & 图像对比度.亮度值调 ...

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

    版权声明:本文为博主原创文章.转载请注明来自http://blog.csdn.net/jediael_lu/ https://blog.csdn.net/jediael_lu/article/deta ...

  9. RabbitMQ系列教程之六:远程过程调用(RPC)(转载)

    RabbitMQ系列教程之六:远程过程调用(RPC) 远程过程调用(Remote Proceddure call[RPC]) (本实例都是使用的Net的客户端,使用C#编写) 在第二个教程中,我们学习 ...

随机推荐

  1. 在Windows安装运行Kafka

    一.安装JAVA JDK 1.下载安装包 http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151. ...

  2. 6.C#知识点:反射

    1.反射是什么? 反射提供描述组件,模块和类型的对象(类型为Type).您可以使用反射来动态创建类型的实例,将类型绑定到现有对象,或从现有对象获取类型,并调用其方法或访问其字段和属性.如果您在代码中使 ...

  3. 【Mysql】可视化工具

    一.navicat 破解方法:http://www.jianshu.com/p/b1f9194e1e31 二. MySQL Workbench(GUI TOOL)一款专为MySQL设计的ER/数据库建 ...

  4. 使用JDBC一次执行多条语句(以MySQL为例)

    阅读本文需要的先修知识: 最基本的SQL语句 最基本的JDBC操作(如插入单条记录) 如急需使用请直接看最后一段代码. 在JDBC中,对记录进行修改操作最简单的方法是使用executeUpdate() ...

  5. Java - equals方法

    java提高篇(十三)-----equals()方法总结 equal和==区别 ==比较对象基于内存引用,两个引用完全相同返回true Java 语言里的 equals方法其实是交给开发者去覆写的,让 ...

  6. Windows Server 2008R2常见的500错误

    每次公司服务器装系统后再去部署服务,都会碰到这个问题,这里记录一下问题的解决方法 遇到“500 – 内部服务器错误. 您查找的资源存在问题,因而无法显示.”的问题. 解决办法: 1.解决方法:打开II ...

  7. python基础技巧综合训练题1

    1,大小写翻转 >>> str='hello,GhostWU' >>> str.swapcase() 'HELLO,gHOSTwu' 2,从一串字符串中,提取纯数字 ...

  8. Mysql实现级联操作(级联更新、级联删除)

    一.首先创建两张表stu,sc create table stu( sid int UNSIGNED primary key auto_increment, name ) not null) TYPE ...

  9. 设计模式原则(6)--Open-Closed Principle(OCP)--开闭原则

    作者QQ:1095737364    QQ群:123300273     欢迎加入! 1.定义: 一个软件实体应当对扩展开放,对修改关闭.即软件实体应尽量在不修改原有代码的情况下进行扩展. 2.使用场 ...

  10. JS写的二级导航栏(利用冒泡原理)

    今天给大家分享一种用JS写的导航栏,虽然我们工作中不会使用JS来做导航栏,为了练习我们用JS来做一个JS导航栏 这种方法要比其他方法代码量少很多,但是需要对事件冒泡有一定的理解,如果需要理解冒泡可以参 ...