论文部分内容阅读
摘要: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格式阅读原文。”
关键词:传统数据库系统;全文检索;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格式阅读原文。”