当前位置:文档之家› Lucene全文检索的应用及检索效率测试研究

Lucene全文检索的应用及检索效率测试研究

Lucene全文检索的应用及检索效率测试研究
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 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数据库中,同样的,删除和编辑数据也可以通过类似的操作来完成。

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,将此参数值设大可以提高索引效率和检索速度。为了弄清这三个参数对索引时间的影响,我们准备了10000篇文档进行测试,结果如表1所示:

表1 测试结果

合并因子最小合并文档数最大合并文档数文档数量时间(秒) 1010Integer1MAX_VALUE10000423

10010Integer1MAX_VALUE10000270

100100Integer1MAX_VALUE10000213

100100Integer1MAX_VALUE10000220

10001000Integer1MAX_VALUE10000194

通过表1,可以清楚地看到三个参数对索引时间的影响。在实践中,只要有足够大的内存,我们可以为合并因子和最小合并文档数赋尽量大的值以提高效率,一般无需更改最大合并文档数,因为系统默认设置为最大[9]。213 检索实现

我们建立的这个全文检索系统最终是要面向广大用户、供用户检索用的,因此,检索功能是全文检索的中心环节。使用Lucene来建立全文检索系统最大的优势就是索引文件,也是最大的难点,可以说设计好X M L数据库和索引文件之后,剩下的就是纯粹的J a va代码的编写及J SP页面的设计。Lucene的检索接口主要是由QueryParser、IndexSe archer、Hit s构成的。简单地说,QueryParser接收到用户端的Keywords后进行解析,发送给程序,然后由IndexSe archer对索引文件进行检索完成本次操作,而Hit s将检索结果封装后返回给用户,如图4所示。

图4 检索接口示意图

设计检索代码时,年份信息检索通过Ra ngeQuery完成,逻辑“与或非”通过Boole a nQuery完成,检索界面如图5所示。网址:http:ΠΠwww1c sir1whu1e du1cnΠp aperΠc sirPort alΠp aperΠshowSe archPaper1do。

图5 检索界面示意图

(下转第83页)

合作数字参考咨询组织在完成规定项目后,各成员向Re gistry注销自己的功能,退出联盟,然后盟主也删除自己建立的Re gistry。这样,整个动态合作数字参考咨询组织联盟就宣告解散。

5 小结

网格的目的就在于支持范围可以跨越全球的虚拟组织内的资源共享与协同工作。网格的高度资源集成能力、跨平台、开放等特性充分满足了构建动态合作数字参考咨询组织的要求。针对O GSA下的网格环境构建合作数字参考咨询组织的一般过程与方法,具有较高的可操作性和通用性,也为合作数字参考咨询服务组织提供了一种思路。

注释

[1]The G lo bus Project1http:ΠΠwww1glo bus1Org

[2]Ia n Fo ster,Carl K e sselma n,Steven Tuecke1The Anatomy of the Grid:Ena bling Sc al a ble Virtual Orga niz ations1Int′l J ournal of

Supercomputer Applic ations,2001,15(3):200-222

[3]柴晓路1We b服务架构与开放互操作技术1北京:清华大学出版社,2002:51-69

[4]周敬治,林桂娜,王强1中外合作数字参考咨询服务的比较研究1图书情报工作,2001(1):100-103

孔繁超 曲阜师范大学日照校区图书馆。

(上接第40页)

另外,我们选取一定数量级的文档(以千为单位),对检索响应时间进行了测试,结果显示响应时间处于毫秒数量级,检索速度较快。

3 结语

利用Lucene实现了全文检索系统的开发,实践表明Lucene能很好地支持中英文全文检索。但值得注意的是,虽然采用了X M L作为数据存储容器能在大信息量的环境下大大节省空间和提高检索的速度,但有关X M L的标准仍未统一制定,其在数据库方面的应用尚未成熟;同时,由于X M L数据库的简单性也会带来网络安全的隐患,因此采用X M L作为后台数据库对运行速度和管理将是严峻的考验。

注释

[1]孔伯煊,李祥1基于LuceneΠX M L技术的We b搜索引擎设计与实现1航空计算技术,2006(4):5-6

[2]金玉玲1基于Lucene的全文检索系统的研究与应用1大连理工大学硕士学位论文,2005(3):46-47

[3]陈俊林,张文德1X M L文档的数据库转换技术研究1现代图书情报技术,2006(9):41-42

[4]宋艳娟1基于X M L的HTM L和PDF信息抽取技术的研究1福州大学硕士学位论文,2005(12):40-58

[5]刘红1X M L文献数据库检索系统的建立与实现1情报学报,2003,22(4):439-440

[6]Lucene倒排索引原理1http:ΠΠdev1c sdn1netΠauthorΠkingjia ngΠ28cf4f5f62c a4bb696c43d5c438e79f71html,2007-08-25

[7]Inverte d index1http:ΠΠwww1eng1auburn1e duΠ~gilbertΠComp7120ΠConcept-50ΠIR-Ba sic s-of-Invert e d-Index1p df,2007-08-

25

[8]朗小伟,王申康1基于Lucene的全文检索系统研究与开发1计算机工程,2006,32(4):95-96

[9]Lucene建立索引的效率1http:ΠΠhi1baidu1comΠlitertigerΠblo gΠitemΠb7b4292e b3f a67514ec2264d1html,2007-12-09

彭 哲 陈敬文 武汉大学信息管理学院博士研究生。

全文检索功能

在应用中加入全文检索功能 ——基于java的全文索引引擎lucene简介 作者:车东 email: https://www.doczj.com/doc/4213927420.html,/https://www.doczj.com/doc/4213927420.html, 写于:2002/08 最后更新: 版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本声明 https://www.doczj.com/doc/4213927420.html,/tech/lucene.html 关键词:lucene java full-text search engine chinese word segment 内容摘要: lucene是一个基于java的全文索引工具包。 1.基于java的全文索引引擎lucene简介:关于作者和lucene的历史 2.全文检索的实现:luene全文索引和数据库索引的比较 3.中文切分词机制简介:基于词库和自动切分词算法的比较 4.具体的安装和使用简介:系统结构介绍和演示 5.hacking lucene:简化的查询分析器,删除的实现,定制的排序,应用接口的扩展 6.从lucene我们还可以学到什么 基于java的全文索引/检索引擎——lucene lucene不是一个完整的全文索引应用,而是是一个用java写的全文索引引擎工具包,它可以方便的嵌入到各种应用中实现针对应用的全文索引/检索功能。 lucene的作者:lucene的贡献者doug cutting是一位资深全文索引/检索专家,曾经是v-twin搜索引擎(apple的copland操作系统的成就之一)的主要开发者,后在excite担任高级系统架构设计师,目前从事于一些internet底层架构的研究。他贡献出的lucene的目标是为各种中小型应用程序加入全文检索功能。 lucene的发展历程:早先发布在作者自己的https://www.doczj.com/doc/4213927420.html,,后来发布在sourceforge,2001年年底成为apache基金会jakarta的一个子项目:https://www.doczj.com/doc/4213927420.html,/lucene/ 已经有很多java项目都使用了lucene作为其后台的全文索引引擎,比较著名的有: ?jive:web论坛系统; ?eyebrows:邮件列表html归档/浏览/查询系统,本文的主要参考文档“thelucene search engine: powerful, flexible, and free”作者就是eyebrows系统的主要开发者之一,而eyebrows已 经成为目前apache项目的主要邮件列表归档系统。 ?cocoon:基于xml的web发布框架,全文检索部分使用了lucene ?eclipse:基于java的开放开发平台,帮助部分的全文索引使用了lucene

lucene版本对比

一、为什么使用lucene 1、Lucene不是一个完整的全文索引应用,而是是一个用JAVA写的全文索引引擎工具包,它可以方便的嵌入到各种应用中实现针对应用的全文索引/检索功能。这样的定位,使得lucene有很高的抽象层次,便于扩展和整合到已有的系统。因为对于大多数的全文搜索应用来说,我们需要的是一个开发工具包而不是最终产品(虽然很多搜索引擎也可以扩展特性功能)。这也是程序员最愿意接受的封装层次。 2、Lucene的API接口设计的比较通用,输入输出结构都很像数据库的表==>记录==>字段,所以很多传统的应用的文件、数据库等都可以比较方便的映射到Lucene的存储结构/接口中。(上面语句有些来自在应用中加入全文检索功能——基于JAVA的全文索引引擎Lucene简介)。 二、lucene4.0新特性较重要部分 1、全部使用字节( utf-8 tytes )替代string来构建 term directory 。 带来的好处是:索引文件读取速度 30 倍的提升;占用原来大约10%的内存;搜索过程由于去掉了字符串的转化速度也会明显提升; 但是如果说这上面的好处只是一个副产品,你会怎么想?没错,Mysql有MyIsam,Innodb等诸多引擎供我们选择的,Lucene为什么不能向这个方向发展呢? 实现这个机制的模块叫:Codec (编码器),你可以实现自己的Codec 来进行自定义的扩展,很显然Codec的操作对象是Segment 。

2、支持多线程建索引,支持:concurrent flushing。 了解过Lucene 3.X的同学们都知道,诸如XXXPerThread 的类在建索引的时候已经支持多线程了,但是当每个线程的内存达到指定上限(maxBufferedDocs or ramMaxBufferSizeMB)的时候就需要写到硬盘上,而这个过程仍然不是多线程的,仍然需要一个个排队Flush到硬盘。Lucene 4.0 终于支持 concurrent flushing 了。DocumentsWriterPerThread ,Lucene 4.0 的Concurrent Flushing 正是这个类来实现的。 3、基于有限自动机的模糊匹配算法(FSA算法),FuzzyQuery FuzzyQuery 这类查询估计大家用的比较少。在英文中单词拼写错误,比如: Lucene, Licene , lucen 等就可以用FuzzyQuery来进行查询提高查全率。 在lucene 4.0 之前的FuzzyQuery 的实现非常耗费cpu,实现算法也很暴力。具体过程是:读取每个term,然后计算每个term与查询词的“编辑距离”,如果在指定的范围内则返回。 Lucene 4.0 使用Levenshtein Automaton 的来衡量文字的"编辑距离" ,使用有限状态自动机来进行计算。以数百倍的效率提升了FuzzyQuery 的效率。 三、lucene4.0正式版亮点功能: 一、通过解码器Codec 机制 Lucene 索引格式与Lucene架构解耦,变成了Plugin方式实现,包括:Terms , Postings lists ,Stored 字段,Term Vectors 等都可以以自定义的格式予以支持。正如Mysql支持多种存储引擎一样,现在Lucene也可以了。

一种基于Lucene的中文全文检索系统

—94— 一种基于Lucene 的中文全文检索系统 苏潭英1,郭宪勇2,金 鑫3 (1. 解放军信息工程大学电子技术学院,郑州 450004;2. 北京飞燕技术公司,北京 100072;3. 解放军通信指挥学院,武汉 430010)摘 要:在开源全文索引引擎Lucene 的基础上,设计了一个中文全文检索系统模型,该模型系统由7个模块组成,索引模块、检索模块是其中的核心部分。论述了模型的整体结构,分析设计了索引及检索模块,通过具体的索引技术和检索技术来提高整个系统的检索效率。该系统增加了加密模块,实现对建立的全文索引进行加密处理,增强了信息的安全性。 关键词:全文检索;Lucene ;倒排索引 Chinese Full-text Retrieval System Based on Lucene SU Tan-ying 1, GUO Xian-yong 2, JIN Xin 3 (1. Institute of Electronic Technology, PLA Information Engineering University, Zhengzhou 450004; 2. Technology Company of Beijing Feiyan, Beijing 100072; 3. Institute of PLA Communication Command, Wuhan 430010) 【Abstract 】This paper proposes a model of Chinese full-text retrieval system based on Lucene which is an open source full-text retrieval engine,and expatiates its frame. This model is composed of seven modules, among which the index module and the search module are the core parts. It designs them concretely, and improves the search efficiency of the full-text retrieval system with index technology and search technology. The system model concludes an encryption module to encrypt the index and increases the system security. 【Key words 】full-text retrieval; Lucene; inverse index 计 算 机 工 程Computer Engineering 第33卷 第23期 Vol.33 No.23 2007年12月 December 2007 ·软件技术与数据库· 文章编号:1000—3428(2007)23—0094—03 文献标识码:A 中图分类号:TP391 1 中文全文检索系统 全文检索技术是一个最普遍的信息查询应用,人们每天在网上使用Google 、百度等搜索引擎查找自己所需的信息,这些搜索引擎的核心技术之一就是全文检索。随着文档处理电子化、无纸化的发展,图书馆、新闻出版、企业甚至个人的电子数据激增,如何建立数据库、管理好自己的数据,是亟待解决的问题,而全文检索是其中一个非常实用的功能。全文检索产品实际上是一个内嵌该项技术的数据库产品[1]。 西文的全文检索已有许多成熟的理论与方法,其中,开放源代码的全文检索引擎Lucene 是Apache 软件基金会Jakarta 项目组的一个子项目,它的目的是为软件开发人员提供一个简单易用的工具包,方便在目标系统中实现全文检索的功能。很多项目使用了Lucene 作为其后台的全文索引引擎,比较著名的有: (1)Jive :Web 论坛系统; (2)Cocoon :基于XML 的Web 发布框架,全文检索部分使用了Lucene ; (3)Eclipse :基于Java 的开放开发平台,帮助部分的全文索引使用了Lucene 。 Lucene 不支持中文,但可以通过扩充它的语言分析器实现对中文的检索。本文在深入学习研究Lucene 的前提下,设计了一个中文的全文检索系统,对其核心的索引模块和检索模块进行了阐释,并添加了加密模块对索引信息加密,增强了系统的安全性。 2 系统的总体结构 本模型总体上采用了Lucene 的架构。Lucene 的体系结构如表1所示,它的源代码程序由7个模块组成。 表1 Lucene 的组成结构 模块名 功能 org.apache.Lucene.search 搜索入口 org.apache.Lucene.index 索引入口 org.apache.Lucene.analysis 语言分析器 org.apache.Lucene.queryParser 查询分析器 org.apache.Lucene.document 存储结构 org.apache.Lucene.store 底层IO/存储结构 org.apache.Lucene.util 一些公用的数据结构 本文通过扩充Lucene 系统来完成中文的全文检索系统,Lucene 包含了大量的抽象类、接口、文档类型等,需要根据具体应用来定义实现,本文对其作了如下扩充修改: (1)按照中文的词法结构来构建相应的语言分析器。Lucene 的语言分析器提供了抽象的接口,因此,语言分析(analyser)是可以定制的。Lucene 缺省提供了2个比较通用的分析器SimpleAnalyser 和StandardAnalyser ,但这2个分析器缺省都不支持中文,因此,要加入对中文语言的切分规则,需要对其进行修改。 (2)按照被索引的文件的格式对不同类型的文档进行解析,进而建立全文索引。例如HTML 文件,通常需要把其中的内容分类加入索引,这就需要从org.apache.lucene.子document 中定义的类Document 继承,定义自己的HTMLDocument 类,然后将之交给org. apache.lucene.index 模块写入索引文件。Lucene 没有规定数据源的格式,只提供 作者简介:苏潭英(1981-),女,硕士研究生,主研方向:数据库全文检索;郭宪勇,高级工程师;金 鑫,硕士研究生 收稿日期:2007-01-10 E-mail :sutanyingwendy@https://www.doczj.com/doc/4213927420.html,

Lucene:基于Java的全文检索引擎简介

由于数据库索引不是为全文索引设计的,因此,使用like "%keyword%"时,数据库索引是不起作用的,在使用like查询时,搜索过程又变成类似于一页页翻书的遍历过程了,所以对于含有模糊查询的数据库服务来说,LIKE对性能的危害是极大的。如果是需要对多个关键词进行模糊匹配:like"%keyword1%" and like "%keyword2%" ...其效率也就可想而知了。 所以建立一个高效检索系统的关键是建立一个类似于科技索引一样的反向索引机制,将数据源(比如多篇文章)排序顺序存储的同时,有另外一个排好序的关键词列表,用于存储关键词==>文章映射关系,利用这样的映射关系索引:[关键词==>出现关键词的文章编号,出现次数(甚至包括位置:起始偏移量,结束偏移量),出现频率],检索过程就是把模糊查询变成多个可以利用索引的精确查询的逻辑组合的过程。从而大大提高了多关键词查询的效率,所以,全文检索问题归结到最后是一个排序问题。 由此可以看出模糊查询相对数据库的精确查询是一个非常不确定的问题,这也是大部分数据库对全文检索支持有限的原因。Lucene最核心的特征是通过特殊的索引结构实现了传统数据库不擅长的全文索引机制,并提供了扩展接口,以方便针对不同应用的定制。 可以通过一下表格对比一下数据库的模糊查询: Lucene全文索引引擎数据库 索引将数据源中的数据都通过全文索引一一建立反向索引对于LIKE查询来说,数据传统的索引是根本用不上的。数据需要逐个便利记录进 行GREP式的模糊匹配,比有索引的搜索速度要有多个数量级的下降。 匹配效果通过词元(term)进行匹配,通过语言分析接口的实 现,可以实现对中文等非英语的支持。 使用:like "%net%" 会把netherlands也匹 配出来, 多个关键词的模糊匹配:使用like "%com%net%":就不能匹配词序颠倒 的https://www.doczj.com/doc/4213927420.html, 匹配度有匹配度算法,将匹配程度(相似度)比较高的结果排在前面。没有匹配程度的控制:比如有记录中net出现5词和出现1次的,结果是一样的。 结果输出通过特别的算法,将最匹配度最高的头100条结果 输出,结果集是缓冲式的小批量读取的。 返回所有的结果集,在匹配条目非常多的 时候(比如上万条)需要大量的内存存放 这些临时结果集。 可定制性通过不同的语言分析接口实现,可以方便的定制出 符合应用需要的索引规则(包括对中文的支持)没有接口或接口复杂,无法定制 结论高负载的模糊查询应用,需要负责的模糊查询的规则,索引的资料量比较大使用率低,模糊匹配规则简单或者需要模糊查询的资料量少 全文检索和数据库应用最大的不同在于:让最相关的头100条结果满足98%以上用户的需求 Lucene的创新之处: 大部分的搜索(数据库)引擎都是用B树结构来维护索引,索引的更新会导致大量的IO操作,Lucene在实现中,对此稍微有所改进:不是维护一个索引文件,而是在扩展索引的时候不断创建新的索引文件,然后定期的把这些新的小索引文件合并到原先的大索引中(针对不同的更新策略,批次的大小可以调整),这样在不影响检索的效率的前提下,提高了索引的效率。 Lucene和其他一些全文检索系统/应用的比较: Lucene其他开源全文检索系统 增量索引和批量索引可以进行增量的索引(Append),可以对于大量 数据进行批量索引,并且接口设计用于优化批 量索引和小批量的增量索引。 很多系统只支持批量的索引,有时数 据源有一点增加也需要重建索引。 数据源Lucene没有定义具体的数据源,而是一个文档 的结构,因此可以非常灵活的适应各种应用 (只要前端有合适的转换器把数据源转换成相 应结构), 很多系统只针对网页,缺乏其他格式 文档的灵活性。 索引内容抓取Lucene的文档是由多个字段组成的,甚至可以 控制那些字段需要进行索引,那些字段不需要 索引,近一步索引的字段也分为需要分词和不 需要分词的类型: 需要进行分词的索引,比如:标题,文章内 容字段 不需要进行分词的索引,比如:作者/日期 字段 缺乏通用性,往往将文档整个索引了

深入理解lucene原理

深入理解lucene原理 一:什么是索引,为什么需要索引 对非结构化数据也即对全文数据的搜索主要有两种方法: 一种是顺序扫描法(Serial Scanning):所谓顺序扫描,比如要找内容包含某一个字符串的文件,就是一个文档一个文档的看,对于每一个文档,从头看到尾,如果此文档包含此字符串,则此文档为我们要找的文件,接着看下一个文件,直到扫描完所有的文件。如利用windows的搜索也可以搜索文件内容,只是相当的慢。如果你有一个80G硬盘,如果想在上面找到一个内容包含某字符串的文件,不花他几个小时,怕是做不到。Linux下的grep命令也是这一种方式。大家可能觉得这种方法比较原始,但对于小数据量的文件,这种方法还是最直接,最方便的。但是对于大量的文件,这种方法就很慢了。 有人可能会说,对非结构化数据顺序扫描很慢,对结构化数据的搜索却相对较快(由于结构化数据有一定的结构可以采取一定的搜索算法加快速度),那么把我们的非结构化数据想办法弄得有一定结构不就行了吗? 这种想法很天然,却构成了全文检索的基本思路,也即将非结构化数据中的一部分信息提取出来,重新组织,使其变得有一定结构,然后对此有一定结构的数据进行搜索,从而达到搜索相对较快的目的。 这部分从非结构化数据中提取出的然后重新组织的信息,我们称之索引 例如:字典,字典的拼音表和部首检字表就相当于字典的索引 二:索引包含哪些东西 其实是由于我们想要搜索的信息和非结构化数据中所存储的信息不一致造成的。

非结构化数据中所存储的信息是每个文件包含哪些字符串,已知文件,欲求字符串相对容易,也即是从文件到字符串的映射。 而我们想搜索的信息是哪些文件包含此字符串,也即已知字符串,欲求文件,也即从字符串到文件的映射。两者恰恰相反。 于是如果索引总能够保存从字符串到文件的映射,则会大大提高搜索速度。 由于从字符串到文件的映射是文件到字符串映射的反向过程,于是保存这种信息的索引称为反向索引。 左边保存的是一系列字符串,称为词典。每个字符串都指向包含此字符串的文档(Document)链表,此文档链表称为倒排表(Posting List)。 三:索引的创建过程 1.全文索引相对于顺序扫描的优势:一次索引,多次使用 2.创建索引的步骤: (1)要索引的原文档 (2)将原文档传给分词组件(Tokenizer) 分词组件会做如下事情:(此过程称为Tokenize) a.将文档分成一个一个的单词 b.去除标点符号 c.去除停词(Stop Word)停词就是语句中无意义的词汇,英语中比如“the”,“a”,“this”等 每一种分词组件(Tokenize)都有一个停词集合 经过分词组件分词后得到的结果称为(词元)Token

Lucene和数据库

全文检索的实现机制 Lucene的API接口设计的比较通用,输入输出结构都很像数据库的表==>记录==>字段,所以很多传统的应用的文件、数据库等都可以比较方便的映射到Lucene的存储结构/接口中。总体上看:可以先把Lucene当成一个支持全文索引的数据库系统。 比较一下Lucene和数据库: Lucene 数据库 索引数据源:doc(field1,field2...) doc(field1,field2...) \ indexer / _____________ | Lucene Index| -------------- / searcher \ 结果输出:Hits(doc(field1,field2) doc(field1...)) 索引数据源: record(field1,field2...) record(field1..) \ SQL: insert/ _____________ | DB Index | ------------- / SQL: select \ 结果输出: results(record(field1,field2..) record(field1...)) Document:一个需要进行索引的“单元” 一个Document由多个字段组成 Record:记录,包含多个字段Field:字段Field:字段 Hits:查询结果集,由匹配的Document组成RecordSet:查询结果集,由多个Record组 成 全文检索≠ like "%keyword%" 通常比较厚的书籍后面常常附关键词索引表(比如:北京:12, 34页,上海:3,77页……),它能够帮助读者比较快地找到相关内容的页码。而数据库索引能够大大提高查询的速度原理也是一样,想像一下通过书后面的索引查找的速度要比一页一页地翻内容高多少倍……而索引之所以效率高,另外一个原因是它是排好序的。对于检索系统来说核心是一个排序问题。 由于数据库索引不是为全文索引设计的,因此,使用like "%keyword%"时,数据库索引是不起作用的,在使用like查询时,搜索过程又变成类似于一页页翻书的遍历过程了,所以对于含有模糊查询的数据库服务来说,LIKE对性能的危害是极大的。如果是需要对多个关键词进行模糊匹配:like"%keyword1%" and like "%keyword2%" ...其效率也就可想而知了。 所以建立一个高效检索系统的关键是建立一个类似于科技索引一样的反向索引机制,将数据源(比如多篇文章)排序顺序存储的同时,有另外一个排好序的关键词列表,用于存储关键词==>文章映射关系,利用这样的映射关系索引:[关键词==>出现关键词的文章编号,出现次数(甚至包括位置:起始偏移量,结束偏移量),出现频率],检索过程就是把模糊查询变成多个可以利用索引的精确查询的逻辑组合的过程。从而大大提高了多关键词查询的效率,所以,全文检索问题归结到最后是一个排序问题。

基于Lucene的网站全文搜索的设计与实现.

科技情报开发与经济 文章编号:1005-6033(2005)15-0242-03 SCI/TECHINFORMATIONDEVELOPMENT&ECONOMY2005年第15卷第15期 收稿日期:2005-06-03 基于Lucene的网站全文搜索的设计与实现 陈庆伟1,刘 军2 (1.山西省网络管理中心,山西太原,030001;2.山西省科技情报研究所,山西太原,030001)摘要:Lucene是一个基于Java技术的开放源代码全文索引引擎工具包,它可以方便 地嵌入到各种应用中实现针对应用的全文索引/检索功能。利用Lucene的API可以比较方便地为一个网站提供全文搜索功能。探讨了如何使用Lucene建造一个通用的Web站点全文搜索工具,并对在构建系统中应注意的若干问题进行了探讨。关键词:全文搜索;Lucene;Java中图分类号:TP393.07文献标识码:A 在构建一个信息类Web站点的时候,站点的全文搜索功能是必备的功能之一。一般站点的信息内容都存储在各种数据库系统中,并使用数据库提供的检索和查询功能构建网站的搜索功能。但随着信息的累‘%keyword%’查询构成的数据检索性能将积,使用数据库中的类似like急剧下降,因此,只使用数据库查询进行全文检索并不是一个好的解决它可以方便方案。Lucene是一个基于Java技术的全文索引引擎工具包,

地嵌入到各种应用中实现针对应用的全文索引/检索功能。例如Lucene可以快速实现一个简单、功能强大的数据全文检索系统。 PDFWord XSLT 格式化 各种输出 Text XML输出 XML格式 XML中间格式 DBLuceneDB 1设计目标 全文检索系统的主要功能就是为信息资料提供全文索引和查询。对 其他 专业格式 图1 接口的实现示意图 于一个以提供信息资料为主要目的网站来说,网站的全文检索系统是必备功能之一。但对于小型的信息网站来说,购置全文检索系统的代价经‘keyword’查询来代替全文检索常是昂贵的。如果只使用数据库的Like

用Lucene检索数据库

用Lucene检索数据库 1.写一段传统的JDBC程序,讲每条的用户信息从数据库读取出来 2.针对每条用户记录,建立一个lucene document Document doc = new Document(); 并根据你的需要,将用户信息的各个字段对应luncene document中的field 进行添加,如: doc.add(new Field("NAME","USERNAME",Field.Store.YES,Field.Index.UN_TOKENIZED)); 然后将该条doc加入到索引中,如:luceneWriter.addDocument(doc); 这样就建立了lucene的索引库 3.编写对索引库的搜索程序(看lucene文档),通过对lucene的索引库的查找,你可以快速找到对应记录的ID 4.通过ID到数据库中查找相关记录 用Lucene索引数据库 Lucene,作为一种全文搜索的辅助工具,为我们进行条件搜索,无论是像Google,Baidu 之类的搜索引擎,还是论坛中的搜索功能,还是其它C/S架构的搜索,都带来了极大的便利和比较高的效率。本文主要是利用Lucene对MS Sql Server 2000进行建立索引,然后进行全文索引。至于数据库的内容,可以是网页的内容,还是其它的。本文中数据库的内容是图书馆管理系统中的某个作者表-Authors表。 因为考虑到篇幅的问题,所以该文不会讲的很详细,也不可能讲的很深。 本文以这样的结构进行: 1.介绍数据库中Authors表的结构 2.为数据库建立索引 3.为数据库建立查询功能 4.在web界面下进行查询并显示结果 1.介绍数据库中Authors表的结构 字段名称字段类型字段含义

Lucene简介

在应用中加入全文检索功能 ——基于Java的全文索引引擎Lucene简介 作者:车东 Email: https://www.doczj.com/doc/4213927420.html,/https://www.doczj.com/doc/4213927420.html, 写于:2002/08 最后更新:09/09/2006 17:09:05 Feed Back >> (Read this before you ask question) 版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本声明 https://www.doczj.com/doc/4213927420.html,/tech/lucene.html 关键词:Lucene java full-text search engine Chinese word segment 内容摘要: Lucene是一个基于Java的全文索引工具包。 1.基于Java的全文索引引擎Lucene简介:关于作者和Lucene的历史 2.全文检索的实现:Luene全文索引和数据库索引的比较 3.中文切分词机制简介:基于词库和自动切分词算法的比较 4.具体的安装和使用简介:系统结构介绍和演示 5.Hacking Lucene:简化的查询分析器,删除的实现,定制的排序,应用 接口的扩展 6.从Lucene我们还可以学到什么 基于Java的全文索引/检索引擎——Lucene Lucene不是一个完整的全文索引应用,而是是一个用Java写的全文索引引擎工具包,它可以方便的嵌入到各种应用中实现针对应用的全文索引/检索功能。 Lucene的作者:Lucene的贡献者Doug Cutting是一位资深全文索引/检索专家,曾经是V-Twin搜索引擎(Apple的Copland操作系统的成就之一)的主要开发者,后在Excite担任高级系统架构设计师,目前从事于一些INTERNET底层架构的研究。他贡献出的Lucene的目标是为各种中小型应用程序加入全文检索功能。 Lucene的发展历程:早先发布在作者自己的https://www.doczj.com/doc/4213927420.html,,后来发布在SourceForge,2001年年底成为APACHE基金会jakarta的一个子项目:https://www.doczj.com/doc/4213927420.html,/lucene/ 已经有很多Java项目都使用了Lucene作为其后台的全文索引引擎,比较著名的有: Jive:WEB论坛系统;

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 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)课题成果之一。

全文检索lucene研究

本文由美白面膜排行榜https://www.doczj.com/doc/4213927420.html,整理 全文检索lucene研究 1 Lucene简介 Lucene是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎。Lucene以其方便使用、快速实施以及灵活性受到广泛的关注。它可以方便地嵌入到各种应用中实现针对应用的全文索引、检索功能,本总结使用lucene3.0.0 2 Lucene 的包结构 1、analysis对需要建立索引的文本进行分词、过滤等操作 2、standard是标准分析器 3、document提供对Document和Field的各种操作的支持。 4、index是最重要的包,用于向Lucene提供建立索引时各种操作的支持 5、queryParser提供检索时的分析支持 6、search负责检索 7、store提供对索引存储的支持 8、util提供一些常用工具类和常量类的支持 Lucene中的类主要组成如下:

1)org.apache.1ucene.analysis语言分析器,主要用于的切词Analyzer是 一个抽象类,管理对文本内容的切分词规则。 2)org.apache.1uceene.document索引存储时的文档结构管理,类似于关系 型数据库的表结构。 3)document包相对而言比较简单,document相对于关系型数据库的记录对 象,Field主要负责字段的管理。 4)org.apache.1ucene.index索引管理,包括索引建立、删除等。索引包是 整个系统核心,全文检索的根本就是为每个切出来的词建索引,查询时就只需要遍历索引,而不需要去正文中遍历,从而极大的提高检索效率。 5)org.apache.1ucene.queryParser查询分析器,实现查询关键词间的运算, 如与、或、非等。 6)org.apache.1ucene.search检索管理,根据查询条件,检索得到结果。 7)org.apache.1ucene.store数据存储管理,主要包括一些底层的I/0操作。 8)org.apache.1ucene.util一些公用类。 3 Document文档 1)void add(Field field) 往Document对象中添加字段 2)void removeField(String name)删除字段。若多个字段以同一个字段 名存在,则删除首先添加的字段;若不存在,则Document保持不变 3)void removeFields(String name)删除所有字段。若字段不存在,则 Document保持不变 4)Field getField(String name)若多个字段以同一个字段名存在,则 返回首先添加的字段;若字段不存在,则Document保持不变 5)Enumeration fields()返回Document对象的所有字段,以枚举类型返 回 6)Field [] getFields(String name)根据名称得到一个Field的数组 7)String [] getValues(String name)根据名称得到一个Field的值的数 组 Document doc1 = new Document();

lucene基础学习

搜索引擎Lucene 第一章Lucene简介 Lucene是apache软件基金会jakarta项目组的一个子项目,是一个开放源代码[的全文检索引擎工具包,即它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎,部分文本分析引擎(英文与德文两种西方语言)。Lucene的目的是为软件开发人员提供一个简单易用的工具包,以方便的在目标系统中实现全文检索的功能,或者是以此为基础建立起完整的全文检索引擎。 第二章lucene索引的建立 的五个基础类 索引的建立,Lucene 提供了五个基础类,分别是Document, Field, IndexWriter, Analyzer, Directory。以下是他们的用途: Document Document的含义为文档,在Lucene中,它代表一种逻辑文件。Lucene本身无法对物理文件建立索引,而只能识别并处理Document的类型文件。Lucene从Document取出相关的数据源并根据属性配置进行相应的处理。 Field 对象是用来描述一个文档的某个属性的 lucene中的field也具有一些特定的类型如

在中,Field内部包含两个静态的内部类分别是Store和Index详细的描述了Field的属性,它们分别表示Field的储存方式和索引方式。 Store类有3个公有的静态属性: :表示该Field不需要储存。 :表示该Field需要储存。 :表示使用压缩方式来保存这个Field的值。 Index有4个公有的静态属性: :表示该Field不需要索引,也就是用户不需要去查找该Field的值。 :表示该Field先被分词再被索引。 TOKENIZED:表示不对该Field进行分词,但是要对他进行索引,也就是该Field会被用户查找。 :表示对该Field进行索引,但是不使用Analyzer,同时禁止它参加评分,主要是为了减少内存的消耗。 Analyzer

开放源代码的全文检索引擎_Lucene

开放源代码的全文检索引擎 Lucene ――介绍、系统结构与源码实现分析 第一节全文检索系统与Lucene简介 一、什么是全文检索与全文检索系统? 全文检索是指计算机索引程序通过扫描文章中的每一个词,对每一个词建立一个索引,指明该词在文章中出现的次数和位置,当用户查询时,检索程序就根据事先建立的索引进行查找,并将查找的结果反馈给用户的检索方式。这个过程类似于通过字典中的检索字表查字的过程。 全文检索的方法主要分为按字检索和按词检索两种。按字检索是指对于文章中的每一个字都建立索引,检索时将词分解为字的组合。对于各种不同的语言而言,字有不同的含义,比如英文中字与词实际上是合一的,而中文中字与词有很大分别。按词检索指对文章中的词,即语义单位建立索引,检索时按词检索,并且可以处理同义项等。英文等西方文字由于按照空白切分词,因此实现上与按字处理类似,添加同义处理也很容易。中文等东方文字则需要切分字词,以达到按词索引的目的,关于这方面的问题,是当前全文检索技术尤其是中文全文检索技术中的难点,在此不做详述。 全文检索系统是按照全文检索理论建立起来的用于提供全文检索服务的软件系统。一般来说,全文检索需要具备建立索引和提供查询的基本功能,此外现代的全文检索系统还需要具有方便的用户接口、面向WWW[1]的开发接口、二次应用开发接口等等。功能上,全文检索系统核心具有建立索引、处理查询返回结果集、增加索引、优化索引结构等等功能,外围则由各种不同应用具有的功能组成。结构上,全文检索系统核心具有索引引擎、查询引擎、文本分析引擎、对外接口等等,加上各种外围应用系统等等共同构成了全文检索系统。图1.1展示了上述全文检索系统的结构与功能。

Lucene:基于Java的全文检索引擎简介

版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本声明。 https://www.doczj.com/doc/4213927420.html,/tech/lucene.html -------------------------------------------------------------------------------- Lucene是一个基于Java的全文索引工具包。 基于Java的全文索引引擎Lucene简介:关于作者和Lucene的历史 全文检索的实现:Luene全文索引和数据库索引的比较 中文切分词机制简介:基于词库和自动切分词算法的比较 具体的安装和使用简介:系统结构介绍和演示 Hacking Lucene:简化的查询分析器,删除的实现,定制的排序,应用接口的扩展 从Lucene我们还可以学到什么 基于Java的全文索引/检索引擎——Lucene Lucene不是一个完整的全文索引应用,而是是一个用Java写的全文索引引擎工具包,它可以方便的嵌入到各种应用中实现针对应用的全文索引/检索功能。 Lucene的作者:Lucene的贡献者Doug Cutting是一位资深全文索引/检索专家,曾经是V-Twin 搜索引擎(Apple的Copland操作系统的成就之一)的主要开发者,后在Excite担任高级系统架构设计师,目前从事于一些INTERNET底层架构的研究。他贡献出的Lucene的目标是为各种中小型应用程序加入全文检索功能。 Lucene的发展历程:早先发布在作者自己的https://www.doczj.com/doc/4213927420.html,,后来发布在SourceForge,2001年年底成为APACHE基金会jakarta的一个子项目:https://www.doczj.com/doc/4213927420.html,/lucene/ 已经有很多Java项目都使用了Lucene作为其后台的全文索引引擎,比较著名的有: Jive:WEB论坛系统; Eyebrows:邮件列表HTML归档/浏览/查询系统,本文的主要参考文档“TheLucene search engine: Powerful, flexible, and free”作者就是EyeBrows系统的主要开发者之一,而EyeBrows已经成为目前APACHE项目的主要邮件列表归档系统。 Cocoon:基于XML的web发布框架,全文检索部分使用了Lucene Eclipse:基于Java的开放开发平台,帮助部分的全文索引使用了Lucene 对于中文用户来说,最关心的问题是其是否支持中文的全文检索。但通过后面对于Lucene 的结构的介绍,你会了解到由于Lucene良好架构设计,对中文的支持只需对其语言词法分析接口进行扩展就能实现对中文检索的支持。 全文检索的实现机制 Lucene的API接口设计的比较通用,输入输出结构都很像数据库的表==>记录==>字段,所以很多传统的应用的文件、数据库等都可以比较方便的映射到Lucene的存储结构/接口中。总体上看:可以先把Lucene当成一个支持全文索引的数据库系统。

开放源代码的全文检索引擎 Lucene

开放源代码的全文检索引擎Lucene ――介绍、系统结构与源码实现分析 第一节全文检索系统与Lucene简介 一、什么是全文检索与全文检索系统? 全文检索是指计算机索引程序通过扫描文章中的每一个词,对每一个词建立一个索引,指明该词在文章中出现的次数和位置,当用户查询时,检索程序就根据事先建立的索引进行查找,并将查找的结果反馈给用户的检索方式。这个过程类似于通过字典中的检索字表查字的过程。 全文检索的方法主要分为按字检索和按词检索两种。按字检索是指对于文章中的每一个字都建立索引,检索时将词分解为字的组合。对于各种不同的语言而言,字有不同的含义,比如英文中字与词实际上是合一的,而中文中字与词有很大分别。按词检索指对文章中的词,即语义单位建立索引,检索时按词检索,并且可以处理同义项等。英文等西方文字由于按照空白切分词,因此实现上与按字处理类似,添加同义处理也很容易。中文等文字则需要切分字词,以达到按词索引的目的,关于这方面的问题,是当前全文检索技术尤其是中文全文检索技术中的难点,在此不做详述。 全文检索系统是按照全文检索理论建立起来的用于提供全文检索服务的软件系统。一般来说,全文检索需要具备建立索引和提供查询的基本功能,此外现代的全文检索系统还需要具有方便的用户接口、面向WWW[1]的开发接口、二次应用开发接口等等。功能上,全文检索系统核心具有建立索引、处理查询返回结果集、增加索引、优化索引结构等等功能,外围则由各种不同应用具有的功能组成。结构上,全文检索系统核心具有索引引擎、查询引擎、文本分析引擎、对外接口等等,加上各种外围应用系统等等共同构成了全文检索系统。图1.1展示了上述全文检索系统的结构与功能。

相关主题
文本预览
相关文档 最新文档