`
stone02111
  • 浏览: 214805 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Lucene入门之构建多种搜索请求

阅读更多
词条搜索
       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入门模块中,我们将深入理解如何使用Lucene进行索引创建和搜索操作。 首先,我们来看Lucene如何建立数据的索引。这通常涉及以下几个步骤: 1. **索引创建**:使用 `IndexWriter` 对象来创建或更新...

    Lucene 2.4 入门例子

    在这个入门例子中,我们将探讨Lucene 2.4版本的一些关键特性和如何构建一个基本的搜索系统。 ### 一、Lucene 2.4 的改进与性能提升 在Lucene 2.4版本中,主要的改动和性能提升包括: 1. **优化索引构建速度**:...

    Lucene3.0入门实例含jar包

    6. **实战应用**:Lucene 3.0 可用于构建企业级的全文搜索引擎、文档管理系统、邮件搜索功能等。开发者可以基于此实例,进一步扩展功能,如支持多语言、实时索引、近实时搜索等。 7. **注意事项**:虽然 Lucene 3.0...

    Lucene资料大全(包括Lucene_in_Action书等)

    3. **搜索查询**:用户可以通过QueryParser或直接构造Query对象来创建搜索请求。Lucene支持布尔查询、短语查询、模糊查询等多种查询类型。 4. **结果排序**:Lucene通过评分机制(如TF-IDF)对搜索结果进行排序,...

    Lucene入门示例

    **Lucene入门示例** Lucene是一个开源的全文搜索引擎库,由Apache软件基金会开发并维护。它是Java语言实现的,但提供了多种语言的接口,包括Python、C#等。本示例将帮助初学者理解Lucene的基本用法,以及如何在实际...

    全文搜索Lucene&ElasticSearch-新版.doc

    【全文搜索Lucene & ElasticSearch】是一门关于安装和入门的课程,主要涵盖了全文检索的基本概念,Lucene和ElasticSearch的介绍,以及如何使用Java操作ElasticSearch。全文检索,顾名思义,是对非结构化数据进行搜索...

    lucene索引入门[归类].pdf

    4. 查询分析器(QueryParser): Lucene 的查询分析器负责将用户的查询请求解析成可执行的查询语句,提供了多种查询方式,包括布尔查询、短语查询、范围查询等。 5. 存储结构(Store): Lucene 的存储结构是负责...

    全文检索系统(Lucene)

    `LuceneDemoSrc`可能是包含一个Lucene入门示例项目的压缩文件,它可能包括以下部分: 1. **源码**:展示了如何创建和使用Lucene索引,以及如何执行搜索。 2. **配置文件**:可能包含Analyzer的配置,用于定制化分词...

    lucene笔记

    它首先会提取文档中的关键词并构建索引,当用户发起搜索请求时,搜索引擎会在索引中查找这些关键词,从而返回相关的文档列表。 #### 二、Lucene实现全文检索的流程 **2.1 索引流程** - **采集数据**: 获取需要被...

    搜索篇:Struts、Lucene的Web实例

    2. **Lucene入门**:解释Lucene的核心概念,如Document、Field、Analyzer和IndexWriter,以及如何建立和管理索引。 3. **Struts与Lucene整合**:演示如何在Struts的Action类中调用Lucene进行搜索,以及如何在JSP页面...

    Lucene3.0_使__用_教_程.doc

    在实际应用中,Lucene支持复杂的查询语法,可以进行布尔运算、短语匹配、模糊搜索等多种搜索模式,以满足不同场景的需求。同时,Lucene还提供了分词、停用词处理、词干化等文本预处理功能,以提高搜索的精确度。此外...

    lucene基础资料

    对于大规模数据,可以利用Solr或Elasticsearch这样的分布式搜索平台,它们基于Lucene构建,提供了集群部署、负载均衡和自动故障恢复等功能。 ### 八、优化与合并段 为了提高搜索性能,Lucene会定期进行段合并...

    lucene in action

    近年来,Lucene因其出色的表现而变得异常流行,现已成为最广泛使用的搜索引擎库之一。许多网站和桌面工具背后的搜索特性都是由Lucene提供的。 虽然Lucene最初是用Java编写的,但随着其普及度的增加以及开发者社区的...

    入门搜索引擎(原码+环境jar包+运行说明文档)

    搜索引擎是信息检索的重要工具,本资源提供了一个入门级的搜索引擎实现,涵盖了网络爬虫和基于Lucene的搜索索引构建。下面将详细讲解其中涉及的关键技术。 首先,我们来看看网络爬虫部分。网络爬虫是一种自动抓取...

    Lucene.zip

    1. **Query**:表示用户的搜索请求,包括TermQuery、PhraseQuery、BooleanQuery等多种类型。 2. **评分机制**:Lucene使用TF-IDF算法计算文档的相关性,TF(Term Frequency)表示词频,IDF(Inverse Document ...

Global site tag (gtag.js) - Google Analytics