搜索引擎lucene

简介: 引用:http://baike.baidu.com/view/371811.htm Lucene是apache软件基金会4 jakarta项目组的一个子项目,是一个开放源代码的全文检索引擎工具包,即它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎,部分文本分析引擎(英文与德文两种西方语言)。

引用:http://baike.baidu.com/view/371811.htm

Lucene是apache软件基金会4 jakarta项目组的一个子项目,是一个开放源代码的全文检索引擎工具包,即它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎,部分文本分析引擎(英文与德文两种西方语言)。Lucene的目的是为软件开发人员提供一个简单易用的工具包,以方便的在目标系统中实现全文检索的功能,或者是以此为基础建立起完整的全文检索引擎。

 
 

编辑本段简介

Lucene是一套用于全文检索和搜寻的开源程式库,由Apache软件基金会支持和提供。Lucene提供了一个简单却强大的应用程式接口,能够做全文索引和搜寻,在Java开发环境里Lucene是一个成熟的免 费开放源代码工具;就其本身而论,Lucene是现在并且是这几年,最受欢迎的免费java资讯检索程式库。人们经常提到资讯检索程式库,就像是搜寻引擎,但是不应该将资讯检索程式库与网搜索引擎相混淆。 [1]

编辑本段历史

Lucene最初是由Doug Cutting开发的,在SourceForge的网站上提供下载。在2001年9月做为高质量的开源Java产品加入到Apache软件基金会的 Jakarta家族中。随着每个版本的发布,这个项目得到
Lucene 图片

  Lucene 图片

明显的增强,也吸引了更多的用户和开发人员。2004年7月,Lucen
Lucene分析图

  Lucene分析图

e1.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
2.4.1 2009年 5月 更新为 2.4.1
2.9.0 2009年9月25号 更新为2.9.0
2.9.1 2009年11月6号 更新为2.9.1
3.0.0 2009年11月25号 更新为3.0.0
3.0.1 2010年2月26号 更新为3.0.1
3.0.2 2010年6月18号 更新为3.0.2
3.0.3 2010年12月3号 更新为3.0.3
3.3.0 2011年7月初 更新为3.3.0
3.4.0 2011年9月14日 更新为3.4.0
3.5.0 2011年11月26日 更新为3.5.0
3.5.0 2012年4月12日更新为3.6.0
3.6.1 2012年7月23日更新为3.6.1
4.0 2012年10月12日更新为4.0 [2]

编辑本段创始人

Lucene['lusen]的原作者是Doug Cutting,他是一位资深 全文索引/检索专家,曾经是V-Twin搜索引擎的主要
Lucene

  Lucene

开发者,后在Excite担任高级系统架构设计师,目前从事于一些Internet底层架构的研究。早先发布在作者自己的,他贡献出Lucene的目标是为各种中小型应用程式加入全文检索功能。后来发布在SourceForge,2001年年底成为apache软件基金会jakarta的一个子项目。

编辑本段特点及优势

作为一个开放源代码项目,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(只使用,不求甚解版-_-")

前提

lucene有7个包需要导入:analysis,document,index,queryParser,search,store,util

编辑本段搜索

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(q2, 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早些版本的写法。lucene3.02的写法有所改变。

编辑本段建立索引

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();
 
 

Apache软件基金会

顶级项目
 ActiveMQ  Ant  Apache HTTP Server  APR
 Beehive  Camel  Cassandra  Cayenne
 Cocoon  Commons  Derby  Directory
 Excalibur  Felix  Forrest  Geronimo
 Gump  Hadoop  Harmony  HBase
 iBATIS  Jackrabbit  James  Lenya
 Lucene  Maven  mod_perl  MyFaces
 OFBiz  OpenEJB  OpenJPA  POI
 Roller  Shale  SpamAssassin  stdcxx
 Struts  Subversion  Tapestry  Tomcat
 Traffic Server  Tuscany  Velocity  Wicket
 XMLBeans      
 
其他项目
 Jakarta项目  Apache XML  Apache Incubator  
 
子项目
 BCEL  BSF  Cactus  JMeter
 Slide  Xerces  Batik  FOP
 Log4j  XAP  River  ServiceMix
 Log4Net  Abdera  Ivy  CXF
 ODE  Solr    
 
参考资料
扩展阅读:
开放分类:
计算机  搜索引擎  开源软件  应用科学  技能  科学  计算机技术  计算机科学  计算机编程  索引 ,  Apache项目
 
 
 
相关文章
|
6月前
|
自然语言处理 搜索推荐 算法
基于Lucene的搜索引擎的设计与实现
基于Lucene的搜索引擎的设计与实现
50 0
|
机器学习/深度学习 缓存 搜索推荐
【搜索引擎】提高 Solr 性能
【搜索引擎】提高 Solr 性能
|
搜索推荐 中间件 Linux
一个基于EntityFrameworkCore+Lucene实现的全文搜索引擎库
这是一个仅70KB的、轻量级的全文检索搜索引擎、基于Lucene实现的。
157 0
一个基于EntityFrameworkCore+Lucene实现的全文搜索引擎库
|
存储 搜索推荐 Java
全文搜索引擎 Lucene Solr ElasticSearch 关系?
全文搜索引擎是目前广泛应用的主流搜索引擎。它的工作原理是计算机索引程序通过扫描文章中的每一个词,对每一个词建立一个索引,指明该词在文章中出现的次数和位置,当用户查询时,检索程序就根据事先建立的索引进行查找,并将查找的结果反馈给用户的检索方式。这个过程类似于通过字典中的检索字表查字的过程。
全文搜索引擎 Lucene Solr ElasticSearch 关系?
|
缓存 监控 搜索推荐
一种基于Lucene的实时搜索服务
因为本文篇幅有限,在这里我只会着重介绍:实时性、高可用性在我们产品中的一些技术实践。 实时解决方案 在介绍我们产品方案之前,首先介绍下业内常见的实时解决方案,见图1-1实时架构图: ![P1](http://img3.
5993 0
|
自然语言处理 Java 数据库
这么说吧,Lucene很简单,其实就是个框架,用于全文检索用的
我是风月连城,喜欢用简单的语言阐述知识点 长期分享原创java文章,分享进阶架构师学习笔记及学习资料 喜欢的大屌们可以关注下,共同学习,一起进步 ps:由于工资迟迟不发,影响心情,好几天没写文章.... Lucene是什么? 0 ) 关键词:Lucene ,搜索,全文检索 1)本质:一个Jar包,一个用于全文检索的框架 2)作用:Lucene不是一个完整的全文索引应用,而是一个用Java写的全文索引引擎工具包,它可以方便的嵌入到各种应用中实现针对应用的全文索引/检索功能。
|
存储 自然语言处理 Java
Lucene & 全文检索
目录结构:1.全文检索 2.Lucene入门3.Lucene进阶 全文检索 一, 生活中的搜索: 1.Windows系统中的有搜索功能:打开“我的电脑”,按“F3”就可以使用查找的功能,查找指定的文件或文件夹。
1257 0
|
存储 API Apache
Lucene的分析资料【转】
Lucene 源码剖析 1 目录 2 Lucene是什么 2.1.1 强大特性 2.1.2 API组成- 2.1.3 Hello World! 2.1.4 Lucene roadmap 3 索引文件结构 3.
1352 0
|
Java 索引 数据库连接
全文检索Lucene (2)
接着全文检索Lucene (1) 。 下面我们来深入的研究一下,如何使用Lucene! 从全文检索Lucene (1)中我们可以看出,Lucene就好比一个双向的工作流,一方面是对索引库的维护,另一方面是对查询过程的支持。
893 0
|
搜索推荐 Java 数据库
全文检索 Lucene(3)
看完前两篇博客之后,想必大家对于Lucene的使用都有了一个比较清晰的认识了。如果对Lucene的知识点还是有点模糊的话,个人建议还是先看看这两篇文章。 全文检索 Lucene(1) 全文检索 Lucene(2) 下面来谈一谈使用Lucene查询的分页机制。
738 0