lucene搜索方式(query类型)
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类型)的更多相关文章
- Lucene搜索方式大合集
package junit; import java.io.File; import java.io.IOException; import java.text.ParseException; imp ...
- Lucene 搜索方式
Lucene 的搜索方式包括:词项查询(TermQuery) / 布尔查询(BooleanQuery) / 短语查询(PhraseQuery) / 范围查询(RangeQuery) / 百搭查询(Wi ...
- lucene 搜索demo
package com.ljq.utils; import java.io.File; import java.util.ArrayList; import java.util.List; impor ...
- ElasticSearch核心知识总结(一)es的六种搜索方式和数据分析
es的六种搜索方式 query string search GET /ecommerce/product/_search //查询所有数据 { "took": 4,//耗费几毫秒 ...
- Elasticsearch系列---常见搜索方式与聚合分析
概要 本篇主要介绍常见的6种搜索方式.聚合分析语法,基本是上机实战,可以和关系型数据库作对比,如果之前了解关系型数据库,那本篇只需要了解搜索和聚合的语法规则就可以了. 搜索响应报文 以上篇建立的mus ...
- lucene 3.0.2 search 各种各样的Query类型
http://blog.sina.com.cn/s/blog_61d2047c010195mo.html lucene的这种各种各样的查询类型 1.TermQuery 最简单的Qu ...
- lucene入门-搜索方式
1 package com.home.utils; import java.util.ArrayList; import java.util.List; import org.apache.lucen ...
- Lucene搜索方法总结
转自:summerbell http://www.iteye.com/topic/569358 1.多字段搜索 使用 multifieldqueryparser 可以指定多个搜索字段. query q ...
- Lucene核心--构建Lucene搜索(上篇,理论篇)
2.1构建Lucene搜索 2.1.1 Lucene内容模型 一个文档(document)就是Lucene建立索引和搜索的原子单元,它由一个或者多个字段(field)组成,字段才是Lucene的真实内 ...
随机推荐
- Fluent NHibernate关系映射
1.好处:Fluent NHibernate让你不再需要去写NHibernate的标准映射文件(.hbm.xml), 方便了我们的代码重构,提供了代码的易读性,并精简了项目代码 实现: (1).首先我 ...
- C#基础知识系列四(运算符汇总)
前言 本节主要来讲C#中的各种运算符.主要包括is运算符.as运算符.checked和unchecked运算符.sizeof运算符.空接合运算符(??).&和&&.移位运算符 ...
- EntityFramework_MVC4中EF5 新手入门教程之七 ---7.通过 Entity Framework 处理并发
在以前的两个教程你对关联数据进行了操作.本教程展示如何处理并发性.您将创建工作与各Department实体的 web 页和页,编辑和删除Department实体将处理并发错误.下面的插图显示索引和删除 ...
- 日志框架对比 NLog VS Log4net
Log4net 先说Log4net,它是.net平台上一个老牌的日志框架,我接触的时间也不长(因为公司有自己的日志库),但是看着各开源库都在用这个于是前段时间也尝试去了解了一下. 首先让我认识到Log ...
- Action+Service +Dao三层的功能划分
来源:http://blog.csdn.net/inter_peng/article/details/41021727 1. Action/Service/DAO简介: Action是管理业务(Ser ...
- Java Web整合开发实战:基于Struts 2+Hibernate+Spring 目录
第1篇 Java Web开发基础第1章 Web的工作机制( 教学视频:31分钟) 1.1 理解Web的概念 1.1.1 Web的定义 1.1.2 Web的三个核心标准 1.2 C/S与B/S两种软件体 ...
- OC基础--OC内存管理原则和简单实例
ARC: 由于自己的学习视频太早,Xcode是iOS6版本,新建命令行项目后,系统会默认启动ARC机制,全程Automatic Reference Counting,简单的说,就是代码中自动加入了re ...
- 【Matplotlib】 标注一些点
相关的文档: Annotating axis annotate() command 标注的代码如下: ... t = 2 * np.pi / 3 plt.plot([t, t], [0, np.cos ...
- html中设置锚点定位的几种常见方法(#号定位)
在html中设置锚点定位我知道的有几种方法,在此和大家分享一下: 1.使用id定位: <a href="#1F">锚点1</a> <div id=&q ...
- java将一维数组拆分成二维数组
package staticFactory; public class Array { public static void main(String[] args) { String[] a=new ...