虽然各大公司都推出了自己的搜索引擎,而且也广受用户好评,但随着硬件的不断升级,用户的需求也在不断升级,因此这些搜索引擎的一些缺点以及不足也暴露出来。如检索速度较慢,安装文件较大,建立索引很慢,导致用户体验不是特别的好。
1.3 Lucene简析
Lucene是apache软件基金会的一个子项目,是一个开源的全文检索引擎工具包,相比于现在流行的搜索引擎,它并不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,为人们提供了完整的查询引擎和索引引擎,以及部分文本分析引擎。Lucene的目的是为软件开发人员提供一个简单易用的工具包,以方便的在目标系统中实现全文检索的功能,或者是以此为基础建立起完整的全文检索引擎。
Lucene作为一个全文检索引擎,其具有如下突出的优点:
1) 索引文件格式独立于应用平台。Lucene定义了一套以8位字节为基础的索引文件格式,使得兼容系统或者不同平台的应用能够共享建立的索引文件。
2) 在传统全文检索引擎的倒排索引的基础上,实现了分块索引,能够针对新的文件建立小文件索引,提升索引速度。然后通过与原有索引的合并,达到优化的目的。
3) 优秀的面向对象的系统架构,使得对于Lucene扩展的学习难度降低,方便扩充新功能。
4) 设计了独立于语言和文件格式的文本分析接口,索引器通过接受Token流完成索引文件的创立,用户扩展新的语言和文件格式,只需要实现文本分析的接口。
5) 已经默认实现了一套强大的查询引擎,Lucene的查询实现中默认实现了布尔操作、模糊查询(Fuzzy Search)、分组查询等等。
面对已经存在的商业全文检索引擎,Lucene也具有相当的优势。
首先,它的开发源代码发行方式(遵守Apache Software License),在此基础上程序员不仅仅可以充分的利用Lucene所提供的强大功能,而且可以深入细致的学习到全文检索引擎制作技术和面相对象编程的实践,进而在此基础上根据应用的实际情况编写出更好的更适合当前应用的全文检索引擎。在这一点上,商业软件的灵活性远远不及Lucene。
其次,Lucene秉承了开放源代码一贯的架构优良的优势,设计了一个合理而极具扩充能力的面向对象架构,程序员可以在Lucene的基础上扩充各种功能,比如扩充中文处理能力,从文本扩充到HTML、PDF等等文本格式的处理,编写这些扩展的功能不仅仅不复杂,而且由于Lucene恰当合理的对系统设备做了程序上的抽象,扩展的功能也能轻易的达到跨平台的能力。
最后,转移到apache软件基金会后,借助于apache软件基金会的网络平台,程序员可以方便的和开发者、其它程序员交流,促成资源的共享,甚至直接获得已经编写完备的扩充功能。最后,虽然Lucene使用Java语言写成,但是开放源代码社区的程序员正在不懈的将之使用各种传统语言实现(例如.net framework),在遵守Lucene索引文件格式的基础上,使得Lucene能够运行在各种各样的平台上,系统管理员可以根据当前的平台适合的语言来合理的选择。
图 1.3.1 Lucene系统结构与源代码组织结构图
从上图中我们能够清晰的看到Lucene优良的结构以及各个模块之间的关系,这也为后面系统的整体设计提供了参考了。
Package:
Org.apache.lucene.document 这个包提供了一些为封装要索引的文档所需要的类,比如Document,Field。这样,每一个文档最终被封装成一个Document对象。
Package:
Org.apache.lucene.analysis 这个包主要功能是对文档进行分词,因为文档在建立索引之前必须要进行分词,所以这个包的作用可以看成是为建立索引做准备工作。 Lucene桌面搜索引擎的设计与实现(3):http://www.youerw.com/jisuanji/lunwen_7560.html