Lucene全文检索的应用及检索效率测试研究
- 格式:pdf
- 大小:549.92 KB
- 文档页数:5
基于Lucene的全文检索系统的研究与实现的开题报告一、选题背景及意义随着互联网时代的到来,信息爆炸式增长已经成为人们必须面对的一个问题。
传统的基于关键字的检索方式已经不能满足人们的需求。
全文检索系统应运而生,它可以从大量的文本中快速准确地查找需要的信息,方便人们的使用。
Lucene是一个流行的全文检索引擎,它是基于Java语言开发的,使用Apache协议开源。
Lucene具有快速、可扩展和高效的特点,在应用领域有广泛的应用,如搜索引擎、电子商务网站、维基百科等。
然而,Lucene作为一个开源的库,仍需要使用者有一定的技术基础才能进行使用。
因此,本文将研究如何利用Lucene实现全文检索系统,并通过分析其架构和实现细节,深入了解全文检索系统的工作原理和技术方法。
二、研究内容1. 全文检索技术的概述2. Lucene的基本原理和架构3. 全文检索系统的需求分析4. Lucene全文检索系统的设计和实现5. 系统优化和性能测试三、预期成果完成本文研究所需的工作,预期可以达到以下成果:1. 掌握全文检索技术的基本原理和方法。
2. 深入了解Lucene的架构和实现细节,掌握Lucene的基本使用方法和技巧。
3. 实现一个基于Lucene的全文检索系统,包括需求分析、系统设计、编码实现、系统优化和性能测试等环节。
4. 对系统的性能进行测试和优化,提高系统的搜索效率和准确性。
四、研究方法1. 文献调研:通过阅读相关的学术论文和技术博客,了解全文检索技术的最新研究进展和应用情况。
2. 系统分析:对基于Lucene全文检索系统的需求进行分析和定位,明确系统的功能和性能要求。
3. 系统设计:根据需求分析,设计系统的架构和流程,确定系统各个模块之间的交互和约束关系。
4. 编码实现:使用Java语言编写全文检索系统,使用Lucene作为底层引擎,实现检索功能和系统界面。
5. 系统测试和优化:进行系统性能测试和故障测试,针对测试结果进行优化和改进。
基于Lucene全文检索系统的研究与实现[摘要] lucene是一个开放源代码的全文检索引擎工具包,利用它可以快速地开发一个全文检索系统。
利用lucene开发了一个全文检索系统,通过其特殊的索引结构,实现了传统数据库不擅长的全文索引机制,提供了对非结构化信息的检索能力。
[关键词] lucene 信息检索全文检索索引一、引言计算机技术及网络技术的迅速发展,使得internet成为人类有史以来资源最多、品种最全、规模最大的信息资源库。
如何在这海量的信息里面快速、全面、准确地查找所需要的资料信息已经成了人们关注的焦点,也成了研究领域内的一个热门课题。
这些信息基本上可以分做两类:结构化数据和非结构化数据(如文本文档、word 文档、pdf文档、html文档等)。
现有的数据库检索,是以结构化数据为检索的主要目标,实现相对简单。
但对于非结构化数据,即全文数据,由于复杂的数据事务操作以及低效的高层接口,导致检索效率低下。
随着人们对信息检索的要求也越来越高,而全文检索因为检索速度快、准确性高而日益受到广大用户的欢迎, lucene是一个用java写的全文检索引擎工具包,可以方便地嵌入到各种应用中实现针对应用的全文索引和检索功能。
这个开源项目的推出及发展,为任何应用提供了对非结构化信息的检索能力。
二、全文检索策略通常比较厚的书籍后面常常附关键词索引表(比如,北京:12,34页,上海:3,77页……),它能够帮助读者比较快地找到相关内容的页码。
而数据库索引能够大大提高查询的速度原理也是一样,由于数据库索引不是为全文索引设计的,因此,使用like “%keyword%”时,数据库索引是不起作用的,在使用like查询时,搜索过程又变成类似于一页页翻书的遍历过程了,所以对于含有模糊查询的数据库服务来说,like对性能的危害是极大的。
如果是需要对多个关键词进行模糊匹配:like“%keyword1%”and like “%keyword2%”……其效率也就可想而知了。
Lucene的全文检索的研究与应用
李永春;丁华福
【期刊名称】《计算机技术与发展》
【年(卷),期】2010(020)002
【摘要】为了改善传统全文检索方法在检索效率上的不足,结合Lucene构建了一个全文检索系统模型.介绍了全文检索的基本过程、Lucene源码结构和逻辑结构,分析了Lucene的索引组成,对比了Lucene全文检索和其它全文检索的区别.该模型可用于中小型的全文检索系统的实现,同时可基于此模型开发定制个性化的搜索引擎.最后通过实验对比了其与传统检索方式的响应时间,利用Lucene的全文检索具有更快的响应速度.
【总页数】4页(P12-15)
【作者】李永春;丁华福
【作者单位】哈尔滨理工大学,计算机学院,黑龙江,哈尔滨,150080;哈尔滨工业大学,计算机学院,黑龙江,哈尔滨,150001
【正文语种】中文
【中图分类】TP311
【相关文献】
1.基于Lucene的全文检索引擎的研究与应用 [J], 李靖;文登敏;张润伟
2.基于Lucene和Heritrix的全文检索引擎的研究与应用 [J], 卿秀华
3.基于Lucene的全文检索引擎研究与应用 [J], 林碧英;赵锐;陈良臣
4.基于Lucene对文件全文检索的研究与应用 [J], 郭永利;卢颖颖
5.基于Lucene和Heritrix的全文检索引擎的研究与应用 [J], 卿秀华
因版权原因,仅展示原文概要,查看原文内容请购买。
目录1.1全文检索引擎Lucene相关技术及应用(第1部分) (2)1.1.1站内搜索相关技术介绍 (2)1.1.2Apache Lucene全文检索引擎工具包 (3)1.1.3Lucene系统库及应用 (9)1.1.4索引管理相关的代码示例 (33)1.1全文检索引擎Lucene相关技术及应用(第1部分)1.1.1站内搜索相关技术介绍1、站内搜索的必要性在以往的网站建设,企业系统的搭建过程中,因为信息比较简单和信息的数量也比较少,站内搜索可能不是必要的功能。
而如今,信息量的增大,网站逻辑的复杂,企业自身对信息架构、管理、发布的需求,以及用户对信息的组织、查询、可寻性的要求越来越高,于是站内搜索的功能要求出现了。
而如果在Web应用系统中能够提供站内搜索,则能够很快的得到用户所要检索的信息,这样给用户提供了很大的方便。
2、和通用搜索引擎的区别谷歌、百度、搜搜等通用搜索引擎都会免费开放站内搜索功能,以嵌入网页代码的形式保持与搜索引擎机器人的沟通、爬取。
但采用此方法的主要弊病有如下三种:(1)这些通用搜索引擎不能及时、全部抓取网站最新页面内容。
这对电子商务网站信息(如价格、活动有效时间等)经常更新的特点来说是致命的,用户查到的可能是过时信息。
(2)既然是所谓通用引擎,其对搜索结果的展示也是通用的,没有差异性的。
其不能按照商城自身业务逻辑去做排序、过滤、展示是其最大的弱项。
(3)通用搜索,无法提供热词,搜索推荐词,关联词等功能,还需要二次开发,增加工作量和复杂度。
因此,站内搜索的出现也是有其具体原因和需求的,在搜索的精确度和效果上击败了通用搜索引擎。
1.1.2Apache Lucene全文检索引擎工具包1、Lucene(/)Lucene是apache软件基金会一个开放源代码的全文检索引擎工具包,是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎,部分文本分析引擎。
Lucene的目的是为软件开发人员提供一个简单易用的工具包,以方便的在目标系统中实现全文检索的功能,或者是以此为基础建立起完整的全文检索引擎——索引、分词、搜索三个主要的部分。
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 to1K 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数据库中,同样的,删除和编辑数据也可以通过类似的操作来完成。
212 索引文件建立及效率分析Lucene使用不同的解析器对不同类型的文档进行解析,如HTM L、PDF、WORD、TEXT等等。
首先解析器会做一些预处理的工作,比如过滤文档中的HTM L标签等,解析器输出的是文本内容,接着分词器(Analyzer)从文本内容中提取出索引项以及相关信息,如索引项的出现频率,然后分词器把这些信息写入索引文件中。
Lucene使用的是倒排索引,对一篇文献来说,我们首先要分词,英文单词由于用空格分割,比较好处理,中文单词则需要特殊的分词处理。
文献中的“是”、“的”、“in”、“once”、“too”等不代表概念的词及标点符号通常没有什么实际意义,可以过滤掉;另外,用户通常希望检索“English”时能把含“english”、“ENG LISH”的文献也找出来,所以所有单词需要统一大小写;检索“go”能把含“goe s”,“went”、“gone”的文献也找出来,所以需要把“goe s”、“went”、“gone”还原成“go”。
例如,某篇文章的内容为“Alice went there,I went there too。
”经过分词处理后,该文章的所有关键词为:[alice][go][there][i][go][there]。
接下来,我们就可以建立倒排索引了,上面的对应关系是:“文章号”对应“文章中所有关键词”,倒排索引则把这个关系倒过来,即“关键词”对应“拥有该关键词的所有文章号”,然后还要加上关键词的“出现频率”和“出现位置”等信息[6][7]。
对中文文献分词来说,Lucene提供了二元分词法,比如“中华人民共和国”,切分之后就是“中华”、“华人”、“人民”、“民共”、“共和”、“和国”,如果使用单个字符切分,那么“中华”被分为“中”、“华”,检索时很可能将“华中”等冗余信息一起显示出来,而采用三元或者多元,精细度又不如二元[8]。
另外,通过对比索引文件,我们发现,采用二元分词每1M产生2121M的索引文件,膨胀率2121,每1M用时大约7秒。
要建立索引,首先要建立一个Document文档对象,然后对Document文档建立索引。
Document文档不仅存储了正文字段,还包括其他描述文献的字段,如标题、作者、摘要等。
其中正文字段由于体积大、占字段多、被检率低的缘故,只存储其url地址,而IndexWriter负责接收新加入的Document文档,并写入索引库中。
索引创建过程如图3所示。
图3 索引创建示意图在需要索引大量文件的前提下,提高索引效率的方法可以是更新硬件资源的配置,也可以通过优化索引设置加快索引文件写入磁盘的过程。
Lucene在内存中持有一块缓冲区,IndexWriter提供了三个参数用来调整缓冲区的大小以及往磁盘上写索引文件的频率:(1)合并因子(mergeFa ctor),这个参数决定了在Lucene的一个索引块中可以存放多少文档以及把磁盘上的索引块合并成一个大的索引块的频率;(2)最小合并文档数,这个参数决定了内存中的文档数至少达到多少时才能将它们写回磁盘,设大此参数值可以显著提高索引性能;(3)最大合并文档数,这个参数决定了一个索引块中的最大文档数,它的默认值是Inte ger1MAX_VALUE,将此参数值设大可以提高索引效率和检索速度。