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. 第四章 一切从IL开始

    从这一部分开始,就开始讲.net的本质了,这第四章就是讲有关IL(中间语言)的内容,主要利用工具,看看VS到底编译出来的是什么东西,从中我们可以看到实现的方式和过程.有助于我们更好的了解.net的本质 ...

  2. [渣翻译] 在ASP.NET MVC WebAPI项目中使用 AngularJS

    原文地址http://blog.technovert.com/2013/12/setting-up-angularjs-for-asp-net-mvc-n-webapi-project/ 我们最近发布 ...

  3. zabbix 的学习应用之路

    1.zabbix  server的安装      http://www.cnblogs.com/smail-bao/p/5643136.html 2.zabbix  agent的安装        h ...

  4. C#中相对路径转换为绝对路径的方法

    第一种方法:使用System.Web类,System.Web.HttpContext.Current.Server.MapPath('相对路径');它还可以写成下面这种先声明空间,然后再使用函数的方式 ...

  5. 遍历HashMap的四种方法

    public static void main(String[] args) { Map<String,String> map=new HashMap<String,String&g ...

  6. Oracle导出数据结构和数据表的方法

    1.PLSQL导出数据结构(数据表.序列.触发器.函数.视图) 1)在左侧 点击tables 2)Tools-->Export User Objects 3)红色1 是你要选择导出的表,红色2 ...

  7. java2集合框架的一些个人分析和理解

    Java2中的集合框架是广为人知的,本文打算从几个方面来说说自己对这个框架的理解. 下图是java.util.Collection的类图(基本完整,有些接口如集合类均实现的Cloneable.Seri ...

  8. NOIP2005提高组 过河

    题目描述 在河上有一座独木桥,一只青蛙想沿着独木桥从河的一侧跳到另一侧.在桥上有一些石子,青蛙很讨厌踩在这些石子上.由于桥的长度和青蛙一次跳过的距离都是正整数,我们可以把独木桥上青蛙可能到达的点看成数 ...

  9. jsp学习(二)

    jsp运行原理 当服务器上的一个jsp页面被第一次请求标记时,服务器上的jsp引擎首先将jsp页面文件转译成一个Java文件,并编译这个java文件生成字节码文件,然后执行字节码文件响应客户的请求. ...

  10. 破解受保护的excel中的密码

    今天朋友给我发了一张excel表,她说不能删除数据,让我帮忙弄弄,我当时就觉得这张表应该是受到保护了,就在视图选项中准备撤销保护,但是却需要密码,后来在网上查找了 下资料,发现有个方法可以将密码破解出 ...