Lucene全文检索的应用及检索效率测试研究
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Luc e ne全文检索的应用
及检索效率测试研究3
彭 哲 陈敬文
【摘 要】使用Lucene设计一个全文检索系统,系统由三大功能模块组成:索引模块、检索模块和存储模块。第二部分着重分析PDF数据转换,X M L文档设计,索引的分词、建立及效率等技术难点,并对中文分词分析器、索引文件膨胀率、索引影响因子及检索系统并对检索响应时间进行测试。应关注X M L数据库的安全性。【关键词】Lucence X M L 全文检索 效率
Abstract:Using lucene de sign a full t ext retrieval syst em,including index mo dule,retrieval mo dule,a nd dat a ba se mo dule1Mainly a nalyze how to tra nsform PDF to X M L,de signing of X M L dat a ba se,Chine se word se gment ation,founding a nd efficiency of indexe s,then t e st s a nalyzer,exp a nsivity,f a ctors of indexe s a nd re sponding time of se arching1The security of X M L dat a ba se should be p aid att ention to1
K ey w ords:Lucene X M L full t ext retrieval efficiency
Lucene不是一个完整的全文检索应用程序,而是一个高性能的J a va全文检索工具包,它可以方便地嵌入到各种应用中实现针对应用的全文检索功能。Lucene以其开放源代码的特性、优异的索引结构和良好的系统架构,得到了越来越广泛的应用。
本文使用Lucene设计并实现了一个全文检索系统,与关系数据库相比,采用X M L作为数据存储容器,实现了单个数据库操作,并在大信息量环境下极大地节省了存储空间,提高了检索的速度。
1 系统分析与设计
本文实现的全文跨库检索系统由三大功能模块组成:索引模块、检索模块和存储模块[1]。
111 索引模块
Lucene最核心的特征就在于它特殊的索引结构可以提高检索效率,这也是我们选择Lucene的重要原因。Lucene使用的是倒排文件索引结构,它把每个关键词、关键词在文中出现频率、关键词在文中位置分别作为词典文件(Term Dictionary)、频率文件(Fre quencie s)、位置文件(Po sitions)保存。其中词典文件不仅保存每个关键词,还保留了指向频率文件和位置文件的指针,通过指针可以找到该关键词的频率信息和位置信息。
同时,关键词在索引文件中的排放顺序是按照字符顺序排列的,所以Lucene可以用二元搜索算法快速定位关键词。
另外,Lucene中使用了Field的概念,用于表达信息所在位置(如标题中、文章中、url中),在建立索引时,该Field信息也记录在词典文件中。由于每个关键词一定属于一个或多个Field,所以每个关键词都有一个Field信息。
为了减少索引文件的大小,Lucene对索引还使用了压缩技术,首先,对词典文件中的关键词进行了压缩,关键词压缩为<前缀长度,后缀>;其次,大量用到了对数字的压缩,数字只保存与上一个值的差值。
在维护索引文件时,Lucene与其他B树结构的索引有所不同,它是在扩展索引的时候不断创建新的索引文件,然后定期把这些新的小索引文件合并到原先的大索引中,这样避免了大量的IO操作,在不影响检索效率的前
3本文系国家社科基金重大项目“建设创新型国家的信息服务体制与信息保障体系研究”(项目编号:06&ZD031)课题成果之一。
提下,提高了索引的效率。
112 检索模块
以J SP页面作为用户检索的界面,对全文各字段进行检索,支持高级查询,对检索结构提供方便的查看方式。检索的实现流程如图1[2]所示:
图1 检索流程示意图
检索系统根据建库时定义的可检索项提供多条检索途径,除了可检索如论文题目、作者、关键词等结构化数据外,还可检索全文、摘要、作者单位、期刊名、年份、期号等信息。各检索项和字段之间提供逻辑“与”、“或”、“非”关系的组配,整个查询信息的表达采用布尔表达、字段表达、自然语言表达相结合的方式。用户端的查询信息首先要进行分析处理,提取出查询项索引、逻辑表达式或其他查询特征描述。
113 存储模块
为了实现跨库检索,我们建立了基于X M L的数据存储,主要目的在于将多个关系数据库的数据合并到一个X M L数据库中,这样有利于减小存储空间、方便数据库操作和维护。X M L数据库被认为是一种半关系型的数据库,实际上它是一个X M L文档的集合,这些文档是持久的并且是可以操作的。目前绝大多数的平台和一些协议都支持X M L,在网络环境下X M L的这一优势极为明显。X M L数据可以被保存为一个文档,被分割为更小的部分并被保存成片段,或者被分解为单独的元素。即使数据不被保存为X M L,它也可以作为X M L被输出,提供给用户或其他应用程序。X M L文档的数据也可以通过解析保存到关系数据库中去。同时,建立和维护一个X M L数据库比建立和维护一个关系数据库要简单方便得多,其脚本基本上全部在客户端执行,可以减轻服务器的负担。对X M L文件进行操作的API有多种,我们选择的是J DOM。简单地说,J DOM基于树型结构,它利用J a va技术对X M L文档实现解析、生成、序列化以及多种操作,如果只是做一些简单的应用,J DOM比较容易上手。
2 系统实现
根据上述分析设计的功能模块,系统的实现可分为三个步骤:设计X M L文献数据库、建立索引文件、实现检索。
211 设计X M L文献数据库
X M L是一种通用的、标准化的语言规范,将它作为容器存储数据使其具有严谨的规范格式和良好的一致性。在SQL Sever2000中,我们可以通过在编写的SQL检索语句中增加FORX M L子句来检索数据,并生成X M L文档。此外,通过指定3种模式(RAW、AUTO和EXPLICIT),可以使检索生成的X M L具有不同的样式进行显示, EXPLICIT模式是最复杂的一种,它可以指明要显示定义预期效果X M L树的形式,从而可对生成的X M L文档的元素布局进行完全的控制[3]。另外,对于PDF全文,可以先将PDF文档转换为中间X M L文档,再基于XSLT抽取规则对中间X M L文档进行信息抽取的方法完成PDF文档转换成X M L文档的工作[4]。因此,我们综合利用两种方法将各数据库的PDF全文转换成X M L数据,然后存储为X M L数据库。
对于一篇全文(若为英文,则去掉中文信息)来说,我们设计的可检索的主要字段包括来源期刊信息(包括期刊中英文名、期刊号、出版年份、期号),作者信息(中英文名、所在单位),文献信息(中英文名、摘要、关键词、分类号、全文、参考文献)等。用E-R图表示如图2[5]。
在后台管理中,我们通过设计数据录入界面来将数据录入到X M L数据库中,当管理员在表单中输入要添加的文献信息数据并提交后,J a va代码就会把这些数据保存到X M L数据库中,同样的,删除和编辑数据也可以通过类似的操作来完成。