词条搜索
TermQuery
Term t=new Term( 被搜索的 Field, 搜索关键词 );
TermQuery q=new TermQuery(t);
组合搜索
组合搜索可以满足搜索词之间一些逻辑关系。
BooleanQuery.
BooleanQuery 的构建方法是,首先常见多个 TermQuery, 然后以多个 TermQuery 为参数构建 BooleanQuery, 在多个 Term 之间要进行逻辑运算。
例如:
Term t1=new Term(“text”,”love”);
TermQuery query1=new TermQuery(t1);
Term t1=new Term(“text”,”you”);
TermQuery query2=new TermQuery(t1);
BooleanQuery q=new BooleanQuery();
q.add(query1, BooleanClause.Occur.MUST );
q.add(query2,BooleanClause.Occur.MUST);
这个请求可以要求结果种出现 love you.
BooleanClause.Occur.MUST: 必须满足
BooleanClause.Occur.MUST_NOT: 必须不满足
BooleanClause.Occur.SHOULD: 搜索结果可以满足。
利用这三种逻辑可以构造出一些组合逻辑。
例如:让搜索结果同时满足多个条件,全 MUST 。
让搜索结果满足一些条件,同时不满足另外一些条件,可以用 MUST 和 MUST_NOT 的组合。
只包含排斥的条件,全用 MUST_NOT 。
含有某个关键字后者其他的关键字。可以用 SHOULD 。
BooleanQuery 对象所支持的子查询数量默认的情况下最多是 1024 个。可以通过 setMaxClauseCount(int num) 方法修改这个值。当然,子查询数量越少,查询的速度会越快。
范围搜索
让搜索的结果处于某个搜索的范围内。
RangeQuery 。
RangeQuery(Term lowerTerm,Term upperTerm,Boolean inclusive);
第一个参数是起始的 Term, 第二个参数是终止的 Term, 第三个参数表示是否包含边界。
包含边界值得搜索:
Term tb=new Term(“id”,”0”);
Term te=new Term(“id”,”2”);
RangeQuery q=new RangeQuery(tb,te,true);
不包含边界的搜索:
RangeQuery q=new RangeQuery(tb,te,false);
前缀搜索
只要求某一些搜索要求,满足某些前缀。这种情况,就要用前缀搜索来处理。
PrefixQuery(Term prefix)
要建立 PrefixQuery 对象,只需指定一个 Term 为其前缀即可以。
短语搜索
将短语组合起来,形成新的短语。例如将 ” 软 ” ,“件 ”, 组合起来,可以形成“软件”。并且可以设置匹配度。
设置不同的间隔量,可以得到不同的短语,如 ” 软 * 件 ”
构建短语搜索的方法,就是先建立几个 Term, 然后按顺添加到 PharseQuery 对象中,如下所示:
Term t1=new Term(“text”,” 软 ”);
Term t2=new Term(“text”,” 件 ”);
PhraseQuery q=new PharseQuery();
q.add(t1);
q.add(t2);
使用 setSlop(int s) 可以设定短语允许的间隔字符数量。
设置为 1, 那么 ” 软硬件 ” 也符合要求。
多短语搜索
MultiPharseQuery 类,可以先指定一个前缀,然后把其他词语加在它的后面,从而组成词语。
例如指定“飞“作为统一前缀,然后指定“机”,“鸟”作为后缀, Lucene 会组成 ” 飞鸟 ” 和 ” 飞机 ” 两个词进行搜索。
Term t1=new Term(“text”,” 飞 ”);
Term t2=new Term(“text”,” 机 ”);
Term t3=new Term(“text”,” 鸟 ”);
MultiPhraseQuery q=new MultiPhraseQuery();
添加统一前缀
q.add(t1);
添加后缀
q.add(new Term[]{t2,t3});
模糊搜索
FuzzyQuery 类,用于英文搜索。根据设定的匹配度,判断词形的相似度,从而得出相应的结果。
“good” 和 ”god” 在某种情况下,看作模糊匹配。
Term t=new Term(“text”,”god”);
FuzzyQuery q=new FuzzyQuery(t,0.6f);
第二个参数指定模糊度,是一个 float 值,默认是 0.5, 这个值越小,搜索的模糊性就越强。搜索的模糊性越强,结果就越多,越不精确。
通配符搜索
可以用 ”*” 表示任意多个字符,用 ”?” 表示任意一个字符。
WildcardQuery 来实现通配符搜索。
Term t=new Term(“text”,” 飞 *”);
WildcardQuery q=new WildcardQuery(t);
可以匹配以 ” 飞 ” 开始的词语。
正则表达式匹配搜索
支持正则表达式的搜索。是最有用的模糊搜索之一。
Term t=new Term(“text”,” 正则表达式 ”);
RegexQuery q=new RegexQuery(t);
分享到:
相关推荐
以上是Lucene入门的基本知识和关键概念,通过深入学习和实践,你可以掌握如何利用Lucene构建强大的全文搜索引擎。记住,实践中遇到的问题往往是最好的学习资源,不断尝试和解决,你将逐渐成为Lucene的专家。
在这个经典Lucene入门模块中,我们将深入理解如何使用Lucene进行索引创建和搜索操作。 首先,我们来看Lucene如何建立数据的索引。这通常涉及以下几个步骤: 1. **索引创建**:使用 `IndexWriter` 对象来创建或更新...
在这个入门例子中,我们将探讨Lucene 2.4版本的一些关键特性和如何构建一个基本的搜索系统。 ### 一、Lucene 2.4 的改进与性能提升 在Lucene 2.4版本中,主要的改动和性能提升包括: 1. **优化索引构建速度**:...
6. **实战应用**:Lucene 3.0 可用于构建企业级的全文搜索引擎、文档管理系统、邮件搜索功能等。开发者可以基于此实例,进一步扩展功能,如支持多语言、实时索引、近实时搜索等。 7. **注意事项**:虽然 Lucene 3.0...
3. **搜索查询**:用户可以通过QueryParser或直接构造Query对象来创建搜索请求。Lucene支持布尔查询、短语查询、模糊查询等多种查询类型。 4. **结果排序**:Lucene通过评分机制(如TF-IDF)对搜索结果进行排序,...
**Lucene入门示例** Lucene是一个开源的全文搜索引擎库,由Apache软件基金会开发并维护。它是Java语言实现的,但提供了多种语言的接口,包括Python、C#等。本示例将帮助初学者理解Lucene的基本用法,以及如何在实际...
【全文搜索Lucene & ElasticSearch】是一门关于安装和入门的课程,主要涵盖了全文检索的基本概念,Lucene和ElasticSearch的介绍,以及如何使用Java操作ElasticSearch。全文检索,顾名思义,是对非结构化数据进行搜索...
4. 查询分析器(QueryParser): Lucene 的查询分析器负责将用户的查询请求解析成可执行的查询语句,提供了多种查询方式,包括布尔查询、短语查询、范围查询等。 5. 存储结构(Store): Lucene 的存储结构是负责...
`LuceneDemoSrc`可能是包含一个Lucene入门示例项目的压缩文件,它可能包括以下部分: 1. **源码**:展示了如何创建和使用Lucene索引,以及如何执行搜索。 2. **配置文件**:可能包含Analyzer的配置,用于定制化分词...
它首先会提取文档中的关键词并构建索引,当用户发起搜索请求时,搜索引擎会在索引中查找这些关键词,从而返回相关的文档列表。 #### 二、Lucene实现全文检索的流程 **2.1 索引流程** - **采集数据**: 获取需要被...
2. **Lucene入门**:解释Lucene的核心概念,如Document、Field、Analyzer和IndexWriter,以及如何建立和管理索引。 3. **Struts与Lucene整合**:演示如何在Struts的Action类中调用Lucene进行搜索,以及如何在JSP页面...
在实际应用中,Lucene支持复杂的查询语法,可以进行布尔运算、短语匹配、模糊搜索等多种搜索模式,以满足不同场景的需求。同时,Lucene还提供了分词、停用词处理、词干化等文本预处理功能,以提高搜索的精确度。此外...
对于大规模数据,可以利用Solr或Elasticsearch这样的分布式搜索平台,它们基于Lucene构建,提供了集群部署、负载均衡和自动故障恢复等功能。 ### 八、优化与合并段 为了提高搜索性能,Lucene会定期进行段合并...
近年来,Lucene因其出色的表现而变得异常流行,现已成为最广泛使用的搜索引擎库之一。许多网站和桌面工具背后的搜索特性都是由Lucene提供的。 虽然Lucene最初是用Java编写的,但随着其普及度的增加以及开发者社区的...
搜索引擎是信息检索的重要工具,本资源提供了一个入门级的搜索引擎实现,涵盖了网络爬虫和基于Lucene的搜索索引构建。下面将详细讲解其中涉及的关键技术。 首先,我们来看看网络爬虫部分。网络爬虫是一种自动抓取...
1. **Query**:表示用户的搜索请求,包括TermQuery、PhraseQuery、BooleanQuery等多种类型。 2. **评分机制**:Lucene使用TF-IDF算法计算文档的相关性,TF(Term Frequency)表示词频,IDF(Inverse Document ...