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. Javascript 里的 in

    写js的时候需要遍历一个对象的属性,把属性名和属性值都提出来,之前没遇到这种需求,查了一下可以用for in的方式. var obj = { "key1":"value1 ...

  2. Object C学习笔记15-协议(protocol)

    在.NET中有接口的概念,接口主要用于定义规范,定义一个接口关键字使用interface.而在Object C 中@interface是用于定义一个类的,这个和.NET中有点差别.在Object C中 ...

  3. Shadowsock搭建

    搭建Shadowsocks服务端: 搭建Shadowsocks之前首先必须购买一个VPS.一般VPS提供商会给一个测试地址,购买之前最好先ping一下速度.也可以通过以下网址测试下vps网络速度: h ...

  4. 第三十课:JSDeferred详解1

    本课难度非常大,看一遍,蛋会疼,第二遍蛋不舒服,第三遍应该貌似懂了.初学者莫来,没必要,这完全就是一个研究. JSDeferred是日本高手cho45搞出来的,其易用性远胜于Mochikit Defe ...

  5. 详解js中的闭包

    前言 在js中,闭包是一个很重要又相当不容易完全理解的要点,网上关于讲解闭包的文章非常多,但是并不是非常容易读懂,在这里以<javascript高级程序设计>里面的理论为基础.用拆分的方式 ...

  6. Beta版本的贡献率

    陈志灏:负责ACTIVITY部分的编写,与服务器间数据交换,贡献率百分比:%30 尤志明:负责服务器PHP编写,以及一些JAVA编程方面的编译问题的解决,贡献率百分比:%40 周子淇:负责layout ...

  7. Linux中使用crontab命令定时执行shell脚本或其他Linux命令

    使用crontab你可以在指定的时间执行一个shell脚本或者一系列Linux命令.例如系统管理员安排一个备份任务使其每天都运行 如何往 cron 中添加一个作业? # crontab –e0 5 * ...

  8. poj3107 树形dp

    好久没更了.前段时间去ec-final,实力水一波,混了个铜,虽然很弱,但是可以算是对之前一段时间的回报吧. 现在每天忙着复习,逃课太多,啥都不会...不想挂科啊!!Orz... 题意(简化):警察想 ...

  9. Java 缓存技术

    以下仅是对map对方式讨论.没有对点阵图阵讨论.作缓存要做以下2点:  1:清理及更新缓存时机的处理: . 虚拟机内存不足,清理缓存 .. 缓存时间超时,或访问次数超出, 启动线程更新 2:类和方法的 ...

  10. Learn sed using these command on Linux(流线式编辑器——sed)

    是对文件中的每一行进行处理,不会对源文件进行修改 sed --version sed '11d' sed_file sed -n '/[Bb]erry/p' sed_file (由于设置了n,所以只打 ...