Lucene是apache软件基金会[4] jakarta项目组的一个子项目,是一个开放源代码[5]的全文检索引擎工具包,即它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎,部分文本分析引擎(英文与德文两种西方语言)。Lucene的目的是为软件开发人员提供一个简单易用的工具包,以方便的在目标系统中实现全文检索的功能,或者是以此为基础建立起完整的全文检索引擎。
Lucene的原作者是Doug Cutting,他是一位资深全文索引/检索专家,曾经是V-Twin搜索引擎[6]的主要开发者,后在Excite[7]担任高级系统架构设计师,目前从事于一些Internet底层架构的研究。早先发布在作者自己的http://www.lucene.com/,后来发布在SourceForge[8],2001年年底成为apache软件基金会jakarta的一个子项目:http://jakarta.apache.org/lucene/。
Lucene最初是由Doug Cutting开发的,在SourceForge的网站上提供下载。在2001年9月做为高质量的开源Java产品加入到Apache软件基金会的 Jakarta家族中。随着每个版本的发布,这个项目得到明显的增强,也吸引了更多的用户和开发人员。2004年7月,Lucene1.4版正式发布,10月的1.4.2版本做了一次bug修正。表1.1显示了Lucene的发布历史。
版本 发布日期 里程碑
0.01 2000年3月 第一个开源版本(SourceForge)
1.0 2000年10月
1.01b 2001年7月 最后的SourceForge版本
1.2 2002年6月 第一个Apache Jakarta版本
1.3 2003年12月 复合索引格式,查询分析器增加,远程搜索,token定位,可扩展的API
1.4 2004年7月 Sorting, span queries, term vectors
1.4.1 2004年8月 排序性能的bug修正
1.4.2 2004年10月 IndexSearcher optimization and misc. fixes
1.4.3 2004年冬 Misc. fixes2.4.1 2009年3月8日发布新版本
2.3.0 2008年1月 更新为2.3.0
2.4.0 2008年10月 更新为2.4.0
作为一个开放源代码项目,Lucene从问世之后,引发了开放源代码社群的巨大反响,程序员们不仅使用它构建具体的全文检索应用,而且将之集成到各种系统软件中去,以及构建Web应用,甚至某些商业软件也采用了Lucene作为其内部全文检索子系统的核心。apache软件基金会的网站使用了Lucene作为全文检索的引擎,IBM的开源软件eclipse[9]的2.1版本中也采用了Lucene作为帮助子系统的全文索引引擎,相应的IBM的商业软件Web Sphere[10]中也采用了Lucene。Lucene以其开放源代码的特性、优异的索引结构、良好的系统架构获得了越来越多的应用。
Lucene是一个高性能、可伸缩的信息搜索(IR)库。它使你可以为你的应用程序添加索引和搜索能力。Lucene是用java实现的成熟的、免费的开源项目,是著名的Apache Jakarta大家庭的一员,并且基于在Apache软件许可 [ASF, License]。同样,Lucene是当前与近几年内非常流行的免费的Java信息搜索(IR)库。
Lucene作为一个全文检索引擎,其具有如下突出的优点:
(1)索引文件格式独立于应用平台。Lucene定义了一套以8位字节为基础的索引文件格式,使得兼容系统或者不同平台的应用能够共享建立的索引文件。
(
2)在传统全文检索引擎的倒排索引的基础上,实现了分块索引,能够针对新的文件建立小文件索引,提升索引速度。然后通过与原有索引的合并,达到优化的目的。
(3)优秀的面向对象的系统架构,使得对于Lucene扩展的学习难度降低,方便扩充新功能。
(4)设计了独立于语言和文件格式的文本分析接口,索引器通过接受Token流完成索引文件的创立,用户扩展新的语言和文件格式,只需要实现文本分析的接口。
(5)已经默认实现了一套强大的查询引擎,用户无需自己编写代码即使系统可获得强大的查询能力,Lucene的查询实现中默认实现了布尔操作、模糊查询(Fuzzy Search[11])、分组查询等等。
面对已经存在的商业全文检索引擎,Lucene也具有相当的优势。
首先,它的开发源代码发行方式(遵守Apache Software License[12]),在此基础上程序员不仅仅可以充分的利用Lucene所提供的强大功能,而且可以深入细致的学习到全文检索引擎制作技术和面相对象编程的实践,进而在此基础上根据应用的实际情况编写出更好的更适合当前应用的全文检索引擎。在这一点上,商业软件的灵活性远远不及Lucene。
其次,Lucene秉承了开放源代码一贯的架构优良的优势,设计了一个合理而极具扩充能力的面向对象架构,程序员可以在Lucene的基础上扩充各种功能,比如扩充中文处理能力,从文本扩充到HTML、PDF[13]等等文本格式的处理,编写这些扩展的功能不仅仅不复杂,而且由于Lucene恰当合理的对系统设备做了程序上的抽象,扩展的功能也能轻易的达到跨平台的能力。
最后,转移到apache软件基金会后,借助于apache软件基金会的网络平台,程序员可以方便的和开发者、其它程序员交流,促成资源的共享,甚至直接获得已经编写完备的扩充功能。最后,虽然Lucene使用Java语言写成,但是开放源代码社区的程序员正在不懈的将之使用各种传统语言实现(例如.net framework[14]),在遵守Lucene索引文件格式的基础上,使得Lucene能够运行在各种各样的平台上,系统管理员可以根据当前的平台适合的语言来合理的选择。
如何用java实现lucene(只使用,不求甚解版-_-")
1.前提
lucene有7个包需要导入:analysis,document,index,queryParser,search,store,util
2.建立索引
IndexWriter writer = new IndexWriter("E:/index", new StandardAnalyze(),true,MaxFieldLength.UNLIMITED); //true代表覆盖原先数据,maxFieldLength用来限制Field的大小
Document doc = new Document();
doc.add(new Field("title", "lucene introduction", Field.Store.YES, Field.Index.ANALYZED,
Field.TermVector.WITH_POSITIONS_OFFSETS));
doc.add(new Field("time", "60", Field.Store.YES, Field.Index.ANALYZED,
Field.TermVector.WITH_POSITIONS_OFFSETS));
writer.addDocument(doc);
writer.optimize(); //优化
writer.close();
3.搜索
IndexSearcher searcher= new IndexSearcher("E:/index") Query query = new TermQuery(new Term("title", "lucene"));//单个字节查询
//Query query = new FuzzyQuery(new Term("title", "lucena"));//模糊查询
//Query query = new WildcardQuery(new Term("title", "lu*"));// 通配符查询 ?代表一个字符,*代表0到多个字符
//BooleanQuery query = new BooleanQuery();//条件查询
//BooleanQuery qson1 = new BooleanQuery();
//Query q1 = new TermQuery(new Term("title", "lucene"));
//qson1.add(q1, Occur.MUST);//MUST是必须满足的
//BooleanQuery qson2 = new BooleanQuery();
//Query q2= new TermQuery(new Term("sex", "woman"));
//qson2 .add(qson1, Occur.MUST_NOT);//MUST_NOT是必须不满足
//query.add(qson1, Occur.SHOULD);
//query.add(qson2, Occur.SHOULD);//SHOULD代表满足qson1或者满足qson2都可以
//PhraseQuery query = new PhraseQuery();//近距离查询
//query.setSlop(5);//距离设置为5
//query.add(new Term("title", "lucene"));
//query.add(new Term("title", "introduction"));//查询出title中lucene和introduction距离不超过5个字符的结果
//Query query = new PrefixQuery(new Term("title", "lu"));//WildcardQuery的lu*一样
//RangeQuery query = new RangeQuery(new Term("time", "50"),new Term("time", "60"), true);
//true代表[50,60],false代表(50,60)
Hits hits = searcher.search(query);
for (int i = 0; i < hits.length(); i++) {
Document d = hits.doc(i);
String title= d.get("title");
System.out.print(title+ " ");
}
这样,基本上就可以使用了
相关推荐
### Lucene基础知识总结 #### 一、Lucene简介与核心概念 **Lucene**是一款高性能、全文搜索引擎库,由Java语言编写。它提供了一套完整的文本索引与搜索功能,被广泛应用于各种需要进行高效文本搜索的应用场景之中...
这份PPT可能包含对Lucene基础知识的快速概览,如Lucene的主要特点、基本用法,以及适合初学者的示例代码。它可能以简洁易懂的方式解释Lucene的关键概念,对于快速入门Lucene是非常有价值的资源。 总的来说,这个...
1. **Lucene基础知识**:介绍Lucene的基本概念,如文档、字段、术语、倒排索引和查询解析,以及如何创建一个基本的Lucene应用。 2. **索引构建**:涵盖如何将结构化和非结构化数据转化为可搜索的索引,包括分词器的...
Lucene基础知识** Lucene首先需要理解的是它的核心概念,包括文档(Document)、字段(Field)、术语(Term)和倒排索引(Inverted Index)。每个文档由多个字段组成,字段内包含文本内容。Lucene通过分析这些文本...
1. **Lucene基础知识**:Lucene的核心概念包括文档、字段、术语和倒排索引。文档是存储信息的基本单元,字段是文档的组成部分,而术语是经过分词后的单词。倒排索引是Lucene实现高效搜索的关键,它将每个术语与包含...
### Lucene基础知识 1. **索引构建**:Lucene的核心功能是创建索引。它将非结构化的文本数据(如网页内容)转换为结构化的、可搜索的表示形式。索引过程包括分词(Tokenization)、词干提取(Stemming)、停用词...
### Lucene基础知识详解 #### 一、Lucene简介 Lucene是一个高性能、全功能的文本搜索引擎库,由Java编写而成。它提供了构建全文检索应用程序所需的完整功能,包括文本索引和搜索的能力。Lucene的核心是索引和搜索...
Lucene基础知识** Lucene的核心功能包括文本分析、索引构建和查询解析。它首先对输入的文档进行分词,然后将这些词语转换为倒排索引,便于快速查找。倒排索引是一种数据结构,它允许快速定位到包含特定词语的文档。...
一、LUCENE基础知识 LUCENE的核心概念主要包括文档(Document)、字段(Field)、索引(Index)和查询(Query)。文档是信息的基本单位,可以包含多个字段,如标题、内容等;字段则定义了文档的结构,每个字段可以...
### 一、Lucene基础知识 1. **全文检索**: Lucene的主要功能是实现文本的全文检索。它能够快速地查找和排序文档中的关键词,支持模糊搜索和布尔查询。 2. **索引构建**: Lucene通过分析文本并创建倒排索引来实现...
虽然这本书出版时间较早,但仍然是学习Lucene基础知识的重要资源之一。作者Otis Gospodnetic与Erik Hatcher都是Lucene社区的核心贡献者,他们在本书中提供了深入浅出的讲解和实用案例。 #### 二、Lucene简介 1. **...
#### 二、Lucene基础知识 **1. 了解Lucene** - **信息检索术语介绍**:本书首先引入了一些基本的信息检索术语,如索引(Index)、文档(Document)、字段(Field)等,帮助读者快速理解Lucene的工作原理。 - **现代搜索...
"lucene基础jar包"指的是包含Lucene核心组件的基础Java档案(JAR)文件集合,这些文件是构建基于Lucene的搜索应用所必需的。 Lucene 的核心功能包括: 1. **索引创建**:Lucene 提供了对文本数据进行高效索引的...
综上所述,《Lucene in Action》第二版不仅是一本全面介绍Lucene基础知识和技术细节的书籍,还包含了大量实用的案例研究和实践经验分享,对于希望深入了解和运用Lucene进行搜索系统开发的读者来说,是一本非常有价值...
### Lucene基础知识详解 #### 一、Lucene简介 **1.1 什么是Lucene** Lucene是一款高性能、全文检索的开源搜索引擎库,由Java语言编写。与Baidu.com或Google Desktop这类直接使用的搜索引擎不同,Lucene更像是一个...
1. **Lucene基础知识**:介绍Lucene的基本概念,如索引、查询解析、评分机制和文档存储。读者将了解到如何创建、更新和删除索引,以及如何设计高效的查询策略。 2. **索引构建与优化**:详述如何有效地构建和优化...
### Lucene基础知识与应用 #### 一、Lucene概述 Lucene是一款高性能、全功能的文本搜索引擎库,它为开发者提供了构建全文检索应用程序所需的工具。Lucene是用Java语言编写的,因此可以轻松地集成到Java应用程序中...
一、Lucene基础知识 Lucene的核心功能包括文档的索引和搜索。它将文本数据转换为倒排索引,使得对关键词的搜索变得快速。在Lucene 2.4中,主要包含以下组件: 1. **Analyzer**:负责文本分词,是语言处理的关键...
**Lucene基础知识** 1. **安装与引入**: 在Java项目中使用Lucene,首先需要下载并添加Lucene的jar包到项目的类路径中,或者使用Maven或Gradle等构建工具进行依赖管理。 2. **索引文档**: 创建索引是Lucene的核心...