转载自:http://sunlongan666.iteye.com/blog/580456
在用Lucene实现全站搜索的过程中,很可能会遇到这样的问题,只所有某种特定的信息资源,而不是全部.如:某综合性站点,有新闻,产品,论坛,Blog,视频等资源,而搜索的时候先选一个类型(下拉列表),再输入关键字进行搜索(当然,这种情况可以直接用sql来实现,我们这里是基于lucene的实现考虑).这种情况下,就要用到and和or的查询了.这里假设索引已经建立好了(如何建立索引请参考:http://www.iteye.com/topic/125599),索引字段为title(标题), type(资源类型,表示新闻还是产品,product为产品,news表新闻),则实现方法如下:
- /**
- * 根据信息分类和关键词进行查询
- * @param type,资源的类型,其值为news或product
- * @param searchKey,搜索的关键字
- * @return Hits
- */
- public Hits executeSearch(String type,String keyword)
- {
- Hits result = null;
- if(type != null && !type.equals("") && keyword != null && !keyword.equals(""))
- {
- try
- {
- //根据关键字构造一个数组
- String[] key = new String[]{keyword,type};
- //同时声明一个与之对应的字段数组
- //意思是 标题中含有keyword的并且资源类型是type 的 信息被检索出来。
- String[] fields = {"title","type"};
- //声明BooleanClause.Occur[]数组,它表示多个条件之间的关系
- BooleanClause.Occur[] flags=new BooleanClause.Occur[]{BooleanClause.Occur.MUST,BooleanClause.Occur.MUST};
- ChineseAnalyzer analyzer = new ChineseAnalyzer();
- //用MultiFieldQueryParser得到query对象
- Query query = MultiFieldQueryParser.parse(key, fields, flags, analyzer);
- //c:/index表示我们的索引文件所在的目录
- IndexSearcher searcher = new IndexSearcher("c:/index");
- //查询结果
- result = searcher.search(query);
- } catch (Exception e)
- {
- e.printStackTrace();
- }
- }
- return result;
- }
这里需要注意的就是BooleanClause.Occur[]数组,它表示多个条件之间的关系,BooleanClause.Occur.MUST表示and,BooleanClause.Occur.MUST_NOT表示not,BooleanClause.Occur.SHOULD表示or.
相关推荐
Lucene是Apache软件基金会的开源全文搜索引擎库,它为开发者提供了在各种应用程序中实现全文检索功能的工具集。Lucene的核心功能包括文本分析、索引创建、查询解析和结果排序。本示例将展示如何在Web环境中使用...
在信息技术日益发达的今天,搜索引擎已成为数据挖掘与信息检索的重要工具。本文将深入探讨一款基于.NET平台的搜索引擎——Luence.net,它以其高效、灵活的特点,为开发者提供了构建搜索功能的强大支持。通过"Luence...
1. **Apache Lucene**:Lucene是一个开源的全文检索库,提供强大的搜索功能。它实现了索引、搜索、高亮显示搜索结果等核心功能,并为开发者提供了丰富的API。 2. **Luke工具**:Luke是用于查看、操作和测试Lucene...
《构建垂直搜索引擎:从爬虫到Lucene检索》 在当今信息爆炸的时代,搜索引擎成为了我们获取知识、解决问题的重要工具。本项目实践旨在介绍如何构建一个基础的垂直搜索引擎,该搜索引擎专注于某一特定领域的信息检索...
本文将深入探讨基于.NET平台的Luence.Net搜索Demo,帮助读者理解如何利用Luence进行高效的数据检索。 首先,我们要明白Luence是什么。Luence是Apache Lucene的.NET版本,它提供了丰富的API和工具,用于构建强大的...
《Luence和ElasticSearch面试准备》 Lucene和ElasticSearch是两个在全文搜索引擎领域中广泛使用的开源工具。Lucene是一个高性能、全文本搜索库,而Elasticsearch则是在Lucene的基础上构建的一个分布式、RESTful风格...
本文将探讨一个名为“VerticalSearcher”的项目,该项目实现了基本的网络爬虫功能,并利用Apache Lucene进行数据检索,为开发者提供了构建垂直搜索引擎的基础。 首先,我们来看“VerticalSearcher”项目的核心部分...
lucene 原理与分析,底层源码解析,应用场景及实践,相关配置
### 获取全部Luence数据 #### 知识点详解 **Lucene** 是一个高性能、全功能的文本搜索引擎库。在本文档中,我们将探讨如何通过Lucene获取索引中的所有文档,包括创建索引、查询索引以及遍历所有文档的具体步骤。 ...
IKAnalyzer是一个专门针对中文的分词工具,而Lucene则是一个全文检索框架。这里我们深入探讨这两个组件以及它们的关联。 **IKAnalyzer** 是一个高性能的Java实现的中文分词器,特别适合于搜索引擎或者文本分析场景...
Lucene,作为一个开源的全文搜索引擎库,被广泛应用于各种信息检索系统中。它提供了一套高效、灵活的文本搜索解决方案,使得开发者能够快速地在大量数据中实现高效的全文检索功能。本文将深入探讨Lucene的工作原理、...
在"Luence简单实例"中,我们可能会看到以下步骤的Java代码实现: 1. **创建索引**: 首先,需要创建一个`IndexWriter`对象,设置好索引目录和分析器。接着,通过`Document`对象添加字段,如`add(new Field("content...
Apache Lucene 是一个开源的全文检索库,由Java编写,为开发者提供了强大的文本搜索功能。在深入理解Lucene 4.6的源代码之前,我们首先需要了解全文搜索引擎的基本原理。全文搜索引擎通过索引文档中的关键词来实现...
Ikanalyzer的优秀之处在于它能较好地处理中文的词语边界问题,如识别出成语、短语等。 接下来,我们讨论一下停用词。停用词是指在搜索和分析过程中通常被忽略的常见词汇,如“的”、“和”、“在”等。这些词在...
标题 "luence索引例子" 暗示我们要探讨的是Lucene,一个广泛使用的全文搜索引擎库,它在处理大量文本数据时提供了高效的检索能力。在这个例子中,我们将深入理解如何利用Lucene创建索引来优化数据库记录的搜索性能。...
6. **性能优化**:如何提升Lucene的性能也是本书的重点,包括内存管理、缓存策略、倒排索引的压缩技术,以及如何通过JVM调优来提高检索速度。 7. **整合应用**:书中展示了如何将Lucene集成到现有的Java应用中,...
在本系统中,Lucene可能被用来实现对知识库内容的快速检索和高相关性的搜索结果。通过索引和分析文本数据,用户可以高效地查找所需的信息。 最后,Spring框架是整个项目的基石,它提供了一种统一的方式来管理对象的...
在信息检索、自然语言处理等领域,分词是基础步骤,因为它能让计算机理解并处理中文文本。盘古分词提供了高效、准确的分词服务,对于C#开发者来说,可以通过API接口将其集成到项目中。 描述中提到的“VS2013”是指...
它为Java开发者提供了一种高性能、可扩展的信息检索服务,广泛应用于搜索引擎、信息检索系统等领域。在本文中,我们将深入探讨Lucene 5.5.3版本的源码,解析其核心设计理念与实现机制。 一、Lucene的基本架构 1. ...
搜索引擎技术的发展可以追溯到 20 世纪 90 年代,随着互联网的普及和搜索引擎技术的成熟,搜索引擎已经成为互联网上最重要的应用之一。搜索引擎技术的发展历程可以分为三个阶段:第一阶段是早期的搜索引擎技术,包括...