lucene的下载和测试
以前上过信息检索的课程,用的是教材Modern Information Retrieval的影印版.这本教材相当经典,讲述了许多非常经典的理论与方法,特 别是 老师独特的上课方式,以及老师本身对于信息检索领域的热情(用她自己的话说是very enjoy),这让我也对信息检索产生了浓厚的兴趣,对信息检索的各种模型也都较熟悉.然而,虽然日常用到了各种搜索引擎,但是并没有触及过任何一个搜索引擎的内核.因此,之前对于信息检索的了解也顶多停留在一些经典模型的掌握和日常搜索引擎的使用上.
现在跟老师做项目,要用到全文检索的搜索引擎,这让我有机会深入到搜索引擎的学习和研究中去.我们小组通过收集各种资料,进行比较,最后决定采用apache(发音:阿帕奇,就跟apache直升机的读音相同)的开源(open source)项目lucene(发音:/'lu:si:n/),在此基础上,根据我们项目的需要以及团队在信息检索领域的核心技术,对lucene进行二次开发.因此,我们搜索引擎的研究也就是从lucene开始的.本文就上周对lucene的学习和使用中的一些主要问题进行阐述,作为资料共享.
1 lucene 2.0.0 的下载
lucene已经成为apache的顶级开源项目,到目前为止,已经发展到 2.0.0 版本,这个版本在今年5月26才发表.据lucene自身的介绍和国内外一些用户的评论来看,2.0.0版的性能在以前版本的基础上有了很大的提高.所以,在我们的项目中也使用了2.0.0版的.
lucene的下载建议到apache的官方主页下载,我用的是校园网,速度还不错.网址是:http://apache.justdn.org/lucene/java/.我们使用的是java版的,当然也可以找到相应的C++版本的.在下载时可以考虑下载两个文件,一是lucene-2.0.0.zip,这个是经过编译后的可以直接运行DEMO的版本,一是lucene-2.0.0-src.zip,这个是源代码文件,在运用时需要使用的就是文件里面的内容.下载页上的其他压缩文件可以不用下,因为国内一般不会用到这些东东.
2 lucene 2.0.0 的测试
下载后,可以对lucene进行一些简单的测试,以了解其性能.但是由于lucene本身只是一个工具包(Tool Kit),并不能象其他系统一样通过双击.exe就可以直接运行.需要编一个简单的接口,才能正常运行.不过在下载的lucene文件中,已经有一个demo文件,其中有一些简单的接口,可以通过控制台来运行.具体操作如下:
2.1 Java开发环境配置(需要安装JDK,并配置好JDK环境)
我使用的是jdk 1.5.0 _07,安装目录为:D:/java/jdk1.5.0_07.
2.2 Lucene开发环境配置
先解压下载的lucene-2.0.0.zip,可以看到lucene-core-2.0.0.jar和lucene-demos-2.0.0.jar这两个文件。将其解压到:d:/Java/lucene-2.0.0。
然后,将lucene-core- 2.0.0 .jar和lucene-demos-2.0.0.jar文件所在路径添加到classpath(类路径),其设置跟配置JDK的classpath的方法一样。比如,在我所建的目录下,就需要将d:/Java/lucene-2.0.0/lucene-core-2.0.0.jar和d:/Java/lucene-2.0.0/lucene-demos-2.0.0.jar添加到环境变量的classpath中.
2.3 Demo测试
进入控制台,先建立索引,然后就可以执行查询了.具体操作如下:
建立索引:
>java org.apache.lucene.demo.IndexFiles d:/Java/lucene- 2.0.0 /src
该功能是对C:/Java/lucene- 1.9.1 /src下所有文件建立索引,同时,在当前命令行位置将生成“index”文件夹,"index"文件夹用与存储文件索引的数据。
执行查询:
>java org.apache.lucene.demo.SearchFiles
控制台将会出现“Query:”提示符,输入检索关键词,按回车键,便可得到查询结果。
注:我在刚开始学习时,借用了tag的lucene学习笔记,其地址是http://blog.csdn.net/qixiang_nj/archive/2006/04/27/679134.aspx
3 测试结果
经过初步简单的测试,我们发现DEMO实现了一些简单的功能,如它能够执行对文本、html、xml、word、pdf文件的检索,并且支持中英文的检索。但进一步的测试发现,虽然它能够实现以上功能,但其性能较差,因为它能很好的支持英文检索,而对中文的检索则并不那么顺利,这大概是因为其是English Speaking country开发的缘故。比如,在对word文件的检索中,我们发现,如果是纯英文文档,它能够顺利的将其检索出来,而如果是纯中文或中英文混合的文档,则检索不到相关文献。
我分析了一下,觉得其中主要有两个原因,一是DEMO本来只是用来测试的,所以其编得比较简单,自然其效率不高;二是lucene的Analyzer中文分析器效果不好。在我们项目的进展中,解决了这两个问题。