基于Java的全文检索引擎Lucene的分析与研究

来源 :电脑知识与技术·学术交流 | 被引量 : 0次 | 上传用户:JYCheng
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘要:Lucene 是一个用Java 写的全文索引引擎工具包,访问索引时间快,支持多用户访问,可以跨平台使用。介绍了基于Java的全文检索引擎Lucene,包括下载与配置,以及基本概念与实现机制,然后将Lucene与传统数据库系统的输入输出机制与查询技术作了比较。
  关键词:传统数据库系统;全文检索;Java; Lucene
  中图分类号:TP393文献标识码:A 文章编号:1009-3044(2008)20-30231-03
  
  Research on the Full Text Retrieval Engine Lucene Based on Java
  LIANG Yong-lin
  (Shaoguan University, Shaoguan 512005,China)
  Abstract: Lucene is a fulltextretrieval engine package written in Javalanguage. Ithashighaccess speed , supports multi-user accesses and can be used in a cross-platform way. This paper introduces the full text retrieval engine Lucene based on Java, including the downloading, Configuration, basic concepts and the implementation mechanism. Then, it is made compare the mechanism of input/output and query technology between Lucene and conventional database system.
  key words: conventional database system; full text retrieval; Java; Lucene
  
  随着科技的发展和经济的腾飞,图书馆、新闻出版、企业等单位电子数据激增,互联网的迅猛发展,可供人们选择的信息也迅速膨胀,如何有效利用日益增长的、海量的信息的问题变得越来越突出。 传统的检索方式越来越不符合发展的需要。人们对查询方式的要求也越来越高,已不局限于使用计算机的标引检索和布尔逻辑功能检索。全文检索系统因为检索功能强大、操作容易而越来越受到广大用户的欢迎。
  
  1 Lucene的简介
  
  Lucene 是一个基于 Java 的全文信息检索工具包,它不是一个完整的搜索应用程序,而是为应用程序提供索引和搜索功能。Lucene 目前是 Apache Jakarta 家族中的一个开源项目,也是目前最为流行的基于 Java 开源全文检索工具包(package)。
  Lucene的作者Doug Cutting是一位资深全文索引/检索专家,曾经是V-Twin搜索引擎(Apple的Copland操作系统的成就之一)的主要開发者,后来在Excite担任高级系统架构设计师,目前从事于一些Internet底层架构的研究。他贡献出的Lucene的目标是为各种中小型应用程序加入全文检索功能。目前已经有很多应用程序的搜索功能是基于 Lucene 的,比较著名的有:
  1)Jive:WEB论坛系统;
  2)Eyebrows:邮件列表HTML归档/浏览/查询系统;
  3)Cocoon:基于XML的web发布框架,全文检索部分使用了Lucene
  4)Eclipse:基于Java的开放开发平台,帮助部分的全文索引使用了Lucene
  Lucene 能够为文本类型的数据建立索引,所以我们只要能把索引的目标数据格式转化成文本格式,Lucene 就能对文档进行索引和搜索。比如,要对 HTML 文档,PDF 文档进行索引的话,首先需要把 HTML 文档和 PDF 文档转化成文本格式,然后将转化后的内容交给 Lucene 进行索引,接着把创建好的索引文件保存到磁盘或者内存中,最后根据用户输入的查询条件在索引文件上进行查询。不指定要索引的文档格式使得 Lucene 能够适用于几乎所有的搜索应用程序[1]。
  
  2 Lucene的下载和配置
  
  2.1 Lucene的下载
  Lucene在jakarta项目中的发布主页:
  http://jakarta.apache.org/Lucene/docs/index.html
  以下网址主要针对windows用户,其它操作系统的用户可在jakarta项目发布主页的网页中查找相关下载。
  Lucene的.jar包的下载网址(其中包括。jar和一个范例demo):
  http://apache.oregonstate.edu/jakarta/Lucene/binaries/Lucene-1.4-final.zip
  Lucene的源代码下载网址:
  http://www.signal42.com/mirrors/apache/jakarta/Lucene/source/Lucene-1.4-final-src.zip
  Lucene的api下载网址:
  http://jakarta.apache.org/Lucene/docs/api/index.html
  2.2 Lucene的配置
  首先,我们要确定已经进行了JDK的安装以及Java使用环境的基本配置,即确保在某个平台下能够正确运行Java源代码[2]。
  接下来进入Lucene的配置:
  普通使用者:在环境变量的CLASSPATH中添加Lucene的位置。比如:“D:\java \Lucene-1.4-final\Lucene-1.4-final.jar;”。
  Jbuilder使用者:在“Project”→“Project Properties”→“Required Libraries”进行添加。
  Jsp使用者:也可以直接将Lucene-1.4-final.jar文件放到\WEB-INF\classes下。
  
  3全文检索的实现机制
  
  3.1 Lucene的数据结构
  Lucene的API接口设计的比较通用,输入输出结构都很像数据库的表==>记录==>字段,所以很多传统的应用文件、数据库等都可以比较方便的映射到Lucene的存储结构/接口中。总体上看,可以先把Lucene当成一个支持全文索引的数据库系统[3]。
  Lucene和传统数据库的输入输出结果比较,如表1所示。
  表1 Lucene与传统数据库系统的输入输出结果比较表
  3.2 Lucene全文检索与传统数据库like模糊查询的比较
  全文检索 ≠ like "%keyword%"
  索引是对数据库表中一个或多个列的值进行排序的结构,它是一种特殊类型的数据库对象,它与表有着密切的联系。实际上,可以把索引理解成一种特殊的目录,建立索引的目的就是提高数据检索效率,改善数据库工作性能,提高数据访问速度。
  索引提供指针以指向存储在表中指定列的数据值,然后根据指定的排序次序排列这些指针。数据库使用索引的方式与使用书的目录很相似:通过搜索索引找到特定的值,然后跟随指针到达包含该值的行,从而达到快速获取信息的目的[4]。
  由于数据库的索引不是为全文检索设计的,因此,使用like "%keyword%"时,数据库索引是不起作用的。在使用like查询时,搜索过程变成类似于一页页翻书的遍历过程,对于含有模糊查询的数据库服务来说,like查询对性能的危害是极大的。如果需要对多个关键词进行模糊匹配,例如:like"%keyword1%" and like "%keyword2%" 其效率必然低下。
  建立一个高效检索系统的关键是建立一个类似于科技索引一样的反向索引机制。将数据源(比如多篇文章)排序顺序存储的同时,有另外一个排好序的关键词列表,用于存储关键词==>文章映射关系,利用这样的映射关系索引:[关键词==>出现关键词的文章编号,出现次数(甚至包括位置:起始偏移量,结束偏移量),出现频率],检索过程就是把模糊查询变成多个可以利用索引的精确查询的逻辑组合的过程。从而大大提高了多关键词查询的效率,所以,全文检索问题归结到最后是一个排序问题。
  由此,可以看出like模糊查询对于数据库系统的精确查询是非常不确定的问题,这也是大部分数据库系统对全文检索支持有限的原因。Lucene最核心的特征是通过特殊的索引结构实现了传统数据库不擅长的全文索引机制,并提供了扩展接口,以方便针对不同应用的定制。
  可以通过表2对比Lucene的全文索引与传统数据库系统的模糊查询。
  全文检索和数据库应用最大的不同在于:让最相关的头100条结果满足98%以上用户的需求。
  
  4 结束语
  
  本文介绍了全文检索引擎Lucene,并与传统数据库系统作出了比較。Lucene实现了Java的非常强大的全文索引检索功能,它可以应用到搜索引擎,中小企业网站站内检索,个人用户桌面搜索引擎建立,特定文档检索数据库建立等。
  
  参考文献:
  [1] 车东.基于Java的全文索引引擎Lucene简介:关于作者和Lucene的历史.[2007-06-16] http://www.chedong.com/tech/Lucene.html
  [2] Otis Gospodnetic, Eric Hatcher.Lucene in Action[M]。 Greenwich :Manning Publications Co,2005.
  [3] The Apache Jakarta Project.Lucene Docs[2007-05-20]http://jakarta.apache.org/lucene/docs/index.html
  [4] 王能斌.数据库系统原理[M].北京:电子工业出版社,2000:226-228.
  注:“本文中所涉及到的图表、注解、公式等内容请以PDF格式阅读原文。”
其他文献
摘要:配置是VHDL语言的一个基本设计单元,用来为设计实体指定综合或仿真时采用的结构体。论文结合教学实际讨论了VHDL语言中配置语句的常用的三种用法:默认配置、元件配置和结构配置。论文首先论述了每种配置语句的格式,然后以数字电路中的半加器和全加器的VHDL描述为例,说明每种配置语句格式的使用方法。最后对论文内容进行归纳并得出几点结论。论文对VHDL语言教学及基于VHDL层次化电路设计都具有一定的指
期刊
摘要:对继电保护装置中模数转换电路进行了探讨,提出了以AD7856芯片为功能核心,DSP芯片TMS320VC33作为控制的具体硬件实现电路和软件设计流程。试验表明该电路满足设计要求,保护电流、电压测量精度达到3%,测量电流精度达到0.2%。  关键字:继电保护;AD7865;采样频率  中图分类号:TM771 文献标识码: 文章编号:1009-3044(2008)13-20764-03
期刊
摘要:介绍数据仓库的概念,通过数据仓库、数据挖掘技术,创建数据挖掘模型,实现了图书流通分析系统,为图书馆管理者提供了决策支持。  关键词:数据仓库;流通分析;数据挖掘;图书馆  中图分类号:TP311文献标识码:A 文章编号:1009-3044(2008)20-30201-03    Research and Application of Books Circulation Analysis Sy
期刊
摘要:数据仓库作为数据库技术应用到特定领域中的一门新技术,在决策系统中起着重要作用。本文阐述了数据仓库的应用背景、基本概念和特点,主要将数据仓库与传统数据库进行对比,并指出传统数据库在创建数据仓库中可充分利用。  关键词:数据仓库;传统数据库  中图分类号:TP311文献标识码:A文章编号:1009-3044(2008)20-30206-02    From Traditional Databas
期刊
摘要:Junit 和Eclipse两种软件的原代码都能从网上免费获得,因此成为许多人的喜爱。对Junit的主要对象类进行了研究,通过实例说明在Eclipse中使用Junit测试的方法。在Eclipse中使用Junit测试Java程序,能实现测试的自动化,从而降低开发费用,最终使软件质量得到提高。  关键词:Eclipse;Junit;Java;测试  中图分类号:TP311文献标识码:A文章编号:
期刊
摘要:本文主要介绍基于编译器构造技术中的由正规表达式到最小化DFA的算法设计和实现技术,以及自动机转换正规式的方法。正规式与自动机理论以不同方式表达相同语言,两者相互转换在编译器构造过程中起至关重要的作用,也被广泛应用于计算机科学的各个领域。  关键词:DFA;NFA;正规表达式;子集构造法  中图分类号:TP314文献标识码:A文章编号:1009-3044(2008)20-30221-03   
期刊
摘要:演化算法因其内在的并行行,在求解多目标优化问题时具有独特的优势。本文介绍多目标演化算法的基本原理,并详细讨论基于Pareto最优概念的多目标演化算法。  关键词:多目标优化;Pareto最优解;演化算法  中图分类号:TP301文献标识码:A文章编号:1009-3044(2008)20-30262-02    Evolutiaon Algorithm for Multi-Objective
期刊
摘要:本文研究了基于VPRS的投标风险规则获取问题,从经验数据中发现风险规律和知识,用于风险预测,可以有效消除项目投标风险系统中的分类错误,得到强规则,支持风险规避决策。  关键词:变精度粗集;投标风险规避;数据挖掘  中图分类号:TP311文献标识码:A文章编号:1009-3044(2008)20-30208-03    Research of VPRS Based on Data Mining
期刊
摘要:首先对网上开放虚拟实验室的基本概念、体系结构和管理模式进行介绍,分析了设计网上开放虚拟实验室的关键技术。最后设计和实现了网上开放虚拟实验室。  关键词:开放虚拟实验室;VNC;用户管理;LDAP  中图分类号:TP393文献标识码:A文章编号:1009-3044(2008)20-30227-02    The Research and Design of Open Virtual Labor
期刊
摘要:Visual Basic语言符合结构化程序设计原则,程序代码由顺序结构、选择结构和循环结构组成,这三种程序结构统称为控制结构。控制结构是编写程序代码的基础。本文论述了控制结构的几个应用实例。  关键词:VB;控制结构;程序设计  中图分类号:TP311文献标识码:A文章编号:1009-3044(2008)20-30256-03    Control Structure Application
期刊