Lucene有多种搜索方式,可以根据需要选择不同的方式。

1、词条搜索(单个关键字查找)

主要对象是TermQuery

调用方式如下:

Term term=new Term(字段名,搜索关键字);
Query query=new TermQuery(term);
Hits hits=searcher.search(query);

2、组合搜索(允许多个关键字组合搜索)

主要对象是BooleanQuery

调用方式如下:

Term term1=new Term(字段名,搜索关键字);
TermQuery query1=new TermQuery(term1);

Term term2=new Term(字段名,搜索关键字);
TermQuery query2=new TermQuery(term2);

BooleanQuery booleanquery=new BooleanQuery();
booleanquery.add(query1,参数)
booleanquery.add(query2,参数)

Hits hits=searcher.search(booleanquery);
此方法中的核心在BooleanQuery的add方法上,其第二个参数有三个可选值,对应着逻辑上的与或非关系

参数如下:

BooleanClause.Occur.MUST                必须包含,类似于逻辑运算的与

BooleanClause.Occur.MUST _NOT       必须不包含,类似于逻辑运算的非

BooleanClause.Occur.SHOULD           可以包含,类似于逻辑运算的或

这三者组合,妙用无穷。

3、范围搜索(允许搜索指定范围内的关键字结果)

主要对象是RangeQuery

调用方式如下:

Term term1=new Term(字段名,起始值);

Term term2=new Term(字段名,终止值);

RangeQuery rangequery=new RangeQuery(term1,term2,参数);

Hits hits=searcher.search(rangequery);
此方法中的参数是Boolean类型的,表示是否包含边界 。

true 包含边界

false不包含边界

4、前缀搜索(搜索起始位置符合要求的结果)

主要对象是PrefixQuery

调用方式如下:

Term term=new Term(字段名,搜索关键字);
PrefixQuery prefixquery=new PrefixQuery (term);
Hits hits=searcher.search(prefixquery);

5、短语搜索(根据零碎的短语组合成新的词组进行搜索)

主要对象是PhraseQuery

调用方式如下:

Term term1=new Term(字段名,搜索关键字);
Term term2=new Term(字段名,搜索关键字);

PhraseQuery phrasequery=new PhraseQuery();
phrasequery.setSlop(参数);
phrasequery.add(term1);
phrasequery.add(term2);
Hits hits=searcher.search(phrasequery);
其中setSlop的参数是设置两个关键字之间允许间隔的最大值。

6、多短语搜索(先指定一个前缀关键字,然后讲其他的关键字加在此关键字之后,组成词语进行搜索)

主要对象是:MultiPhraseQuery

调用方式如下:

Term term=new Term(字段名,前置关键字);
Term term1=new Term(字段名,搜索关键字);
Term term2=new Term(字段名,搜索关键字);

MultiPhraseQuery multiphrasequery=new MultiPhraseQuery();

multiphrasequery.add(term);
multiphrasequery.add(new Term[]{term1,term2});

Hits hits=searcher.search(multiphrasequery);

7、模糊搜索(顾名思义)

主要对象是:FuzzyQuery

调用方式如下:

Term term=new Term(字段名,搜索关键字);
FuzzyQuery fuzzyquery=new FuzzyQuery (term,参数);
Hits hits=searcher.search(fuzzyquery);
此中的参数是表示模糊度,是小于1的浮点小数,比如0.5f

8、通配符搜索(顾名思义)

主要对象是:WildcardQuery

调用方式如下:

Term term=new Term(字段名,搜索关键字+通配符);
WildcardQuery wildcardquery=new WildcardQuery (term);
Hits hits=searcher.search(wildcardquery);

其中的通配符分两种,即*和?

* 表示任意多的自负

?表示任意一个字符

9、正则表达式搜索(顾名思义)

主要对象是:RegexQuery

调用方式如下:www.2cto.com

Lucene 搜索种类很多。这里就介绍几个最常用的。其中TermQuery\BooleanQuery\RegexQuery功能最强大,最为常用。

作者:wyq_wzw

http://www.2cto.com/kf/201207/140701.html

lucene搜索方式(query类型)的更多相关文章

  1. Lucene搜索方式大合集

    package junit; import java.io.File; import java.io.IOException; import java.text.ParseException; imp ...

  2. Lucene 搜索方式

    Lucene 的搜索方式包括:词项查询(TermQuery) / 布尔查询(BooleanQuery) / 短语查询(PhraseQuery) / 范围查询(RangeQuery) / 百搭查询(Wi ...

  3. lucene 搜索demo

    package com.ljq.utils; import java.io.File; import java.util.ArrayList; import java.util.List; impor ...

  4. ElasticSearch核心知识总结(一)es的六种搜索方式和数据分析

    es的六种搜索方式 query string search GET /ecommerce/product/_search //查询所有数据 { "took": 4,//耗费几毫秒 ...

  5. Elasticsearch系列---常见搜索方式与聚合分析

    概要 本篇主要介绍常见的6种搜索方式.聚合分析语法,基本是上机实战,可以和关系型数据库作对比,如果之前了解关系型数据库,那本篇只需要了解搜索和聚合的语法规则就可以了. 搜索响应报文 以上篇建立的mus ...

  6. lucene 3.0.2 search 各种各样的Query类型

    http://blog.sina.com.cn/s/blog_61d2047c010195mo.html     lucene的这种各种各样的查询类型 1.TermQuery       最简单的Qu ...

  7. lucene入门-搜索方式

    1 package com.home.utils; import java.util.ArrayList; import java.util.List; import org.apache.lucen ...

  8. Lucene搜索方法总结

    转自:summerbell http://www.iteye.com/topic/569358 1.多字段搜索 使用 multifieldqueryparser 可以指定多个搜索字段. query q ...

  9. Lucene核心--构建Lucene搜索(上篇,理论篇)

    2.1构建Lucene搜索 2.1.1 Lucene内容模型 一个文档(document)就是Lucene建立索引和搜索的原子单元,它由一个或者多个字段(field)组成,字段才是Lucene的真实内 ...

随机推荐

  1. MySQL 索引背后的数据结构及算法原理

    本文转载自http://blog.jobbole.com/24006/ 摘要本文以MySQL数据库为研究对象,讨论与数据库索引相关的一些话题.特别需要说明的是,MySQL支持诸多存储引擎,而各种存储引 ...

  2. 随堂练习——Rational rose

    管理员 学生

  3. UTL_FILE详解

    包UTL_FILE 提供了在操作系统层面上对文件系统中文件的读写功能.非超级用户在使用包UTL_FILE中任何函数或存储过程前必须由超级用户授予在这个包上的EXECUTE权限.例如:我们使用下列命令对 ...

  4. POJ1947 Rebuilding Roads

    Description The cows have reconstructed Farmer John's farm, with its N barns (1 <= N <= 150, n ...

  5. BZOJ2818 欧拉函数

    题意:求1--n中满足gcd(x,y)的值为质数的数对(x,y)的数目 ( (x,y)和(y,x)算两个 ) sol: 设p[i]是一个质数,那么以下两个命题是等价的: 1.gcd(x,y)=1 2. ...

  6. IM通信协议逆向分析、Wireshark自定义数据包格式解析插件编程学习

    相关学习资料 http://hi.baidu.com/hucyuansheng/item/bf2bfddefd1ee70ad68ed04d http://en.wikipedia.org/wiki/I ...

  7. 修改host

    需修改手机/etc/hosts文件.将” 118.194.60.190 域名” 添加 手机的/etc/hosts文件.手机需有root权限,操作如下:1. C:\Documents and Setti ...

  8. boost库(条件变量)

    1相关理念 (1)类名 条件变量和互斥变量都是boost库中被封装的类. (2)条件变量 条件变量是thread库提供的一种等待线程同步的机制,可实现线程间的通信,它必须与互斥量配合使用,等待另一个线 ...

  9. linux下svn命令大全

    linux下svn命令大全 1.将文件checkout到本地目录 svn checkout path(path是服务器上的目录) 例如:svn checkout svn://192.168.1.1/p ...

  10. Java,PostgreSQL时间范围查询

    遇到一坑:对于如下代码 select * from order_mileagefuel where date > '2015-11-1' and date< '2015-11-5' 在Po ...