(计算机科学与技术专业论文)lucene与中文分词技术的研究及应用.pdf_第1页
(计算机科学与技术专业论文)lucene与中文分词技术的研究及应用.pdf_第2页
(计算机科学与技术专业论文)lucene与中文分词技术的研究及应用.pdf_第3页
(计算机科学与技术专业论文)lucene与中文分词技术的研究及应用.pdf_第4页
(计算机科学与技术专业论文)lucene与中文分词技术的研究及应用.pdf_第5页
已阅读5页,还剩58页未读 继续免费阅读

(计算机科学与技术专业论文)lucene与中文分词技术的研究及应用.pdf.pdf 免费下载

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

学位论文版权使用授权书 本学位论文作者完全了解北京交通大学有关保留、使用学位论文的规定。特 授权北京交通大学可以将学位论文的全部或部分内容编入有关数据库进行检索, 提供阅览服务,并采用影印、缩印或扫描等复制手段保存、汇编以供查阅和借阅。 同意学校向国家有关部门或机构送交论文的复印件和磁盘。 ( 保密的学位论文在解密后适用本授权说明) 学位论文作者签名:积只妈飞 导师签名: 签字同期:m 】d 年b 月巩r d 彩乏 签字日期:p 护年月乙沟 中图分类号:t p 3 9 1 3 u d c :8 0 1 2 0 0 学校代码:1 0 0 0 4 密级:公开 北京交通大学 硕士学位论文 lucene 与中文分词技术的 研究及应用 t h er e s e a r c ha n d a p p l i c a t i o n o nl u c e n ea n dc h i n e s ew o r ds e g m e n t a t i o n 作者姓名:胡鹏飞 导师姓名:朱卫东 学位类别:工科 学号:0 8 1 2 0 6 0 3 职称:副教授 学位级别:硕士 学科专业:计算机科学与技术研究方向:计算机应用 北京交通大学 2 0 1 0 年6 月 致谢 论文的工作是在我的导师朱卫东教授的悉心指导下完成的,朱卫东教授严谨 的治学态度和科学的工作方法给了我极大的帮助和影响。在此衷心感谢两年来朱 卫东教授对我的关心和指导。 朱卫东教授悉心指导我们完成了实验室的科研工作,在我读研期问,无论是 在选择学位课程、确定论文研究方向等的问题上,还是在完成实验室的科研项目 以及论文成稿的过程中,朱卫东都给予了亲切的指导和帮助,在此谨向朱卫东老 师致以真诚的敬意和衷心的感谢。 我还要借此机会,感谢与我一起求学的同学们,是他们的支持和鼓励、陪伴 和督促,使我努力学习,不断追求进步。 另外也感谢我的家人,他们的理解和支持使我能够在学校专心完成我的学业。 最后,谨向百忙之中抽出宝贵时间审稿的老师们致以诚挚的谢意! 中文摘要 摘要:随着现代信息技术的不断发展,信息检索成为了互联网应用的核心, 而全文检索是现代信息检索技术的核心中的核心。与普通检索方式不同,全文检 索主要处理非结构化数据,通过索引构造器对非结构化的数据构造反向索引,并 根据权重计算公式计算索引结果权重,分析文档相关性,建立文档和索引的相关 度排名,最后达到准确检索目标文件的目的,因此全文检索技术也成为了现代搜 索引擎技术的核心。 虽然现有的商业搜索引擎可以满足一般的用户需求,但是针对企业用户以及 有特殊需求的个人或研究机构,商业搜索引擎在保密性以及灵活性方面,还远远 不能满足这些特定用户的需求。因此这些用户通常选择开源搜索引擎作为其解决 方案,而l u c e n e 就是其中较为优秀的解决方案之一。 本文分析并研究了l u c e n e 实现的原理及其组织结构,并且在保留l u c e n e 架构 的基础上,针对其不足之处进行了改进。首先,提供了l u c e n e 对于多种文件格式 支持,使其能够支持p d f ,w o r d ,e x c e l ,p p t ,h t m l 等文件格式的检索。 其次,对于l u c e n e 只支持命令行的操作模式,对其改进,使其拥有更加直观的用 户界面,提高了用户体验。最后,针对l u c e n e 对于中文支持不足的缺陷,本文详 细研究目前主流的中文分词算法和技术,并结合构造的基于l u c e n e 的搜索引擎实 例加以实现,并对各种中文分词器进行对比测试,分析优劣,使用户能够针对不 同的应用环境,构造一个最适合的中文搜索引擎解决方案。 关键词:l u c e n e ,中文分词,搜索引擎,文档解析 分类号:t p 3 9 1 3 , r a b s t r a c t w i t ht h ec o n t i n u o u sd e v e l o p m e n to fm o d e r ni n f o r m a t i o nt e c h n o l o g y , i n f o r m a t i o n r e t r i e v a lh a sb e c o m et h ec o r eo fi n t e m e ta p p l i c a t i o n s w h i l et h ef u l l t e x ts e a r c hi st h e m o s ti m p o r t a n to n eo fm o d e mi n f o r m a t i o nr e t r i e v a lt e c h n o l o g y b e i n gd i f f e r e n tf r o m o r d i n a r ys e a r c h ,t h ef u l l - t e x ts e a r c hm a i n l yp r o c e s s e su n s t r u c t u r e dd a t a , b u l i dr e v e r s e i n d e xo nu n s t r u c t u r e dd a t ab yi n d e xc o n s t r u c t o r , a n dc a l c u l a t e sw e i g h to fi n d e xr e s u l t s b yw e i g h tc o m p u t ef o r m u l a ,a n a l y z e st h er e l a t i v i t yo fd o c u m e n t s ,e s t a b l i s h e st h e r e l a t i v i t yr a n k i n go fd o c u m e n t sa n di n d e x ,a n df i n a l l ya c h i e v e st h eg o a lo fa c c u r a t e l y r e t r i e v i n gt h ed o c u m e n t s s ot h ef u l l - t e x ts e a r c ht e c h n o l o g yh a sb e c o m et h ec o r eo f m o d e r ns e a r c he n g i n et e c h n o l o g y a l t h o u g ht h ee x i s t i n gc o m m e r c i a ls e a r c he n g i n ec a ns a t i s f yt h eg e n e r a lu s e r s s r e q u i r e m e n t s ,i tf a rt of u l f i l lt h ee n t e r p r i s eu s e r s ,i n d i v i d u a l so rr e s e a r c hi n s t i t u t e s w h i c hh a v es o m es p e c i a ln e e d s ,s u c ha sf l e x i b i l i t ya n dc o n f i d e n t i a l i t y t h e r e f o r e ,t h e s e u s e r so f t e nc h o o s et h eo p e ns o u r c es e a r c he n g i n ea st h e i rs o l u t i o n ,a n dl u c e n ei so n eo f t h eo u t s t a n d i n gs o l u t i o n s t h ep a p e ra n a l y z e st h ep r i n c i p l e sa n ds t r u c t u r e so ft h el u c e n e , d e f i c i e n c i e sw i t hr e t a i n i n gt h eb a s i ss t r u c t u r eo fl u c e n e f i r s to fa l l ,m a k el u c e n e s u p p o r tm a n yf i l ef o r m a t s ,s ot h a ti tc a ns u p p o r tm a n yk i n d so ff i l er e t r i e v a l ,s u c ha s p d f 、w o r d 、e x c e l 、p p ta n dh t m l e t c s e c o n d l y , w em a k e st h eu s e ri n t e r f a c eo f l u c e n em o r ei n t u i t i v ew h i l ei to n l ys u p p o r t sc o m m a n dl i n em o d eb e f o r e ,s ot h a tc a n g r e a t l yi m p r o v et h eu s e re x p e r i e n c e f i n a l l y , b e c a u s eo ft h el a c ko fc h i n e s es u p p o r to n l u c e n e ,t h i sp a p e rr e s e a r c ht h em o s tp o p u l a rc h i n e s ew o r ds e g m e n t a t i o na l g o r i t h ma n d t e c h n o l o g yi nd e t a i l s ,c o m b i n sw i t hs e a r c he n g i n ew h i c hi sb a s e do nl u c e n e ,w ea l s o c o m p a r e s w i t ho t h e rc h i n e s ew o r d s e g m e n t a t i o na l g o r i t h m , a n dd o e n o u g h t e s t i n g ,a n a l y s i s e st h ea d v a n t a g ea n ds h o r t c o m i n g s ,e n a b l e su s e r st oc h o o s ed i f f e r e n t s o l u t i o n si n d i f f e r e n te n v i r o n m e n t st oc o n s t r u c t st h em o s ts u i t a b l ec h i n e s es e a r c h e n g i n e k e y w o r d s :l u c e n e ;c h i n e s ew o r ds e g m e n t a t i o n ;s e a r c he n g i n e ;d o c u m e n tp a r s e r c l a s s n o :t p 3 9 1 3 目录 中文摘要i i i a b s t r a c t :i v 1 绪论1 1 1 引言1 1 1 1 研究的背景及意义l 1 1 2 搜索引擎研究的现状l 1 2 相关技术概述2 1 2 1 l u c e n e 概述2 1 2 2s t r u t s 2 概述。3 1 3 主要工作及论文结构4 1 3 1 主要工作4 1 3 2 论文结构4 1 4 本章小结4 2l u c e n e 的全面分析5 2 1 l u c e n e 的结构分析5 2 1 1 l u c e n e 的总体架构5 2 1 2l u c e n e 的包结构6 2 2l u c e n e 的索引技术8 2 2 1 索引操作的类结构8 2 2 2 索引的组织结构9 2 2 3 索引的数据结构10 2 2 4 索引的建立模式。1 1 2 2 5 索引的优化方法1 2 2 2 6 索引的存储方式1 4 2 。3l u c e n e 的检索技术1 5 2 3 1l u c e n e 的检索类结构1 5 2 3 2l u c e n e 的检索语法1 6 2 3 3 l u c e n e 的检索过程17 2 4 本章小结18 3 中文分词的相关分析1 9 3 1 中文分词的研究现状19 3 2中文分词算法的比较和分析1 9 3 2 1 基于字符串匹配的分词方法1 9 3 2 2 基于理解的分词方法2 l 3 2 3 基于统计的分词方法2 2 3 2 4 基于语义的分词方法2 3 3 3本章小结2 3 4全文搜索引擎实现分析与设计2 4 4 1全文搜索引擎系统的需求分析2 4 4 2全文搜索引擎系统的设计2 5 4 2 1 系统设计目标2 5 4 2 2 系统总体设计2 5 4 2 3 系统模块设计2 7 4 3本章小结2 8 5全文搜索引擎的实现2 9 5 1信息采集模块的实现2 9 5 1 1 信息采集模块的总体结构2 9 5 1 2 网页抓取模块的实现3 0 5 1 3 网页分析模块的实现3 0 5 2文档解析模块的实现3l 5 2 1 文档解析模块的详细设计31 5 2 2p d f 文件格式的解析3 2 5 2 3o f f i c e 文件格式的解析3 3 5 2 4h t m l 文件格式的解析3 5 5 3中文分词模块的实现3 6 5 4索引模块的实现。3 7 5 4 1 索引的建立3 7 5 4 2 索引的删除3 8 5 4 3 索引的优化处理3 9 5 5搜索模块的实现4 0 5 5 1 搜索的建立4 0 5 5 2 搜索结果的排序4 2 5 5 3 搜索的优化处理4 3 5 6用户模块的实现4 3 5 7本章小结4 4 2 6中文分词性能分析4 5 6 1测试环境和测评标准4 5 6 1 1 测试环境4 5 6 1 2 测试数据4 5 6 1 3 测评标准4 6 6 2测试结果以及结果分析4 7 6 2 1 测试结果4 7 6 2 2 结果分析4 8 6 3本章小结4 9 7结论5 0 参考文献,l 作者简历j 独创性声明5 4 学位论文数据集” l 绪论 1 1引言 1 1 1研究的背景及意义 随着互联网应用的不断发展,互联网上的信息量成几何级的增长。一方面,人 们享受互连网带来的便利,另一方面,却面临着一个如何在如此海量的信息中准 确并且快捷地找到自己所需要的信息的问题,由此互联网搜索引擎便应运而生【1 1 。 对普通用户来说,商业的互联网搜索引擎功能强大,能够满足其基本应用需求。 但是对于特定用户群,例如中小企业用户、科研机构等,商业搜索引擎还不能完 全满足其应用需求,其存在着信息保密性差,信息针对性低,不能按需配置等一 系列的缺陷。然而,开发一个搜索引擎的代价非常昂贵,不仅需要大量的资金投 入,而且还需要很强的技术实力。因此,要想拥有一个独立稳定且配置灵活,安 全性高的搜索引擎,还是一个比较困难的事。 l u c e n e 的出现很好的满足了上述需求,开发人员使用l u c e n e 这个全文搜索引 擎工具包,不仅能够快捷高效的开发出一个专业的搜索引擎,而且由于它的完全 开源的特性,开发人员完全能够根据用户的需求进行配置,针对某个具体的领域, 运行于某个特定的网络中,保证了数据的安全性同时也方便了用户。 虽然l u c e n e 功能强大且配置灵活,但是其对于中文以及多种文本格式的支持 却很是不足,本文通过对l u c e n e 的研究和分析,针对l u c e n e 的一些不足,加以改 进,并对系统进行实现。同时,还分析对比了多种中文分词算法性能的优劣,通 过实际测试后得出的数据进行对比,力求得出一种最适合的解决中文搜索解决方 案。 1 1 2搜索引擎研究的现状 搜索引擎经过几代的发展,现在各项技术已是比较成熟,但是最高端的技术仍 然集中在少数几个大公司手中。方面人们对搜索引擎的研究和交流越发热烈, 另一方面搜索引擎高端技术的垄断却从未停止。 第一代搜索引擎出现在1 9 9 4 年,以集中式检索为主要特征【2 1 。其检索速度非 常慢,需要检索的数据量也比较少,一般要检索的数据是1 0 0 万左右,但是等待 时间却要1 0 秒甚至更长。第二代搜索引擎系统出现在1 9 9 6 年,其采用采用分布 式检索方案,检索数据量和检索速度较第一代搜索引擎有明显提高,待检索的数 据量一般保存在5 0 0 0 万左右,每天能够响应1 千万次用户检索请求。第三代搜索 引擎系统出现在1 9 9 8 年到2 0 0 0 年期i 日j ,其具有索引数据库巨大,响应速度快, 搜索准确度高,用户匹配度强等几大特剧引。 现代搜索引擎更多的朝着提高用户体验,提高检索结果的准确性,及时性方向 发展。使用人工智能进行检索分类,并智能化判断用户身份,提供用户需要的匹 配度最高的信息。这个运用运用了人工智能分类以及特征提取等智能化策略的搜 索引擎,就是现在研究的第四代主题搜索引擎。今后搜索引擎的研究必然向着更 加智能化,专一化的方向发展,l u c e n e 的出现,正好迎合了这个发展方向。 1 2 相关技术概述 1 2 1l u c e n e 概述 l u c e n e 是a p a c h e 软件基金会i a k a r t a 项目组的一个子项目,是一个开放源代码 的全文检索引擎工具包。需要说明的是,它是一个全文检索引擎的架构,而不是 一个完整的全文检索引擎,l u c e n e 提供了完整的查询引擎和索引引擎,以及一些 西方语言分析引擎。l u c e n e 的主要目标是让开发人员能方便快捷的开发出一个高 质量的搜索引擎【3 】。 自从l u c e n e 问世之后,便在开源社区引起了的巨大反响,开发人员不仅能够 通过l u c e n e 构建全文搜索引擎,而且还将它集成到各种系统软件中去。例如构建 w e b 应用,嵌入式开发,甚至某些商业软件也采用了l u c e n e 作为其全文检索系统 的核心。l u c e n e 的用途如此广泛,主要是由于l u c e n e 具有如下突出的优剧3 】: 1 ) 索引文件格式独立于应用平台,具有跨平台性。 2 ) 实现分块索引,能够针对小文件建立小索引,同时还能合并索引。 3 ) l u c e n e 的源码开放,并且还具有架构合理,代码优雅,扩展性强等有点。 4 ) 文本和语言分析接1 2 1 独立,能够针对不同国家和地区使用。 5 ) 查询引擎异常强大,能够实现中实现布尔操作、模糊查询、分组查询等等。 此外,随着l u c e n e 在中国国内受到越来越广泛的关注,更多的企业或个人, 通过对l u c e n e 的二次开发,以极低的成本获得一个高效稳定的搜索引擎,同时还 能按需定制,极大的提高了开发效率。 2 1 2 2s t r u t s 2 概述 s t r u t s2 是一个高雅的、可扩展的、应用于构建企业级w e b 应用的框架。它不 但注重程序的丌发过程,而且还注重程序部署和后期维护。本文选用s t r u t s 2 作为 全文信息检索系统的丌发框架,主要因为它有如下几个优点【4 】: 1 ) a c t i o n 通过接口实现 s t r u t s 2a c t i o n 类可以继承一个a c t i o n s u p p o r t 类,其实现了a c t i o n 所需要的一 些常用接口,同时用户也可实现其他功能接口,这样使得用户可以选择和定制所 需的服务。另外,a c t i o n 对象还具有低耦合性,任何有e x e c u t e 标识的p o j o 对象 都可以用作s t r u t s 2 的a c t i o n 对象。 2 ) 线程安全 s t r u t s 2 中的a c t i o n 对象为每一个请求产生一个实例,因此在多用户并发的环 境下,系统仍然是线程安全的。另外,多个请求的实例也不会对系统性能造成太 大的影响,因为其s e r v l e t 容器很好的管理了多个实例资源,当其不被用户使用时, 立即释放这些资源。 3 ) w e b 容器依赖 s t r u t s 2a c t i o n 不依赖于容器,允许a c t i o n 脱离容器进行单独的测试。虽然a c t i o n 与容器解耦,但是仍然可以通过实现接口的方式访问h t t p s e r v e t r e q u e s t 和 h t t p s e r v l e t r e s p o n s e 对象。 4 ) 可测试性 s t r u t s 2a c t i o n 可以通过在初始化、设置属性、调用方法等几个阶段来进行测试。 同时在内部也对s p r i n g 做了支持,可以使用s p r i n g 进行i o c ( 反转控制) 来管理 测试依赖对象。 5 1 数据传递性 s t r u t s2 使用a c t i o n 对象附带的属性作为输入属性,减少了属性传递时的转换 操作。输入属性可以是一般数据类型,也可以是拥有子属性的r i c h 对象类型,r i c h 对象类型的范围很广,包括业务对象,能够用作输入输出的对象。使用融c h 对象 前,必须要实现m o d e l d r i v e n 接口。 6 ) 类型转换 s t r u t s 2 使用o g n l ( o b j e c tg r a p hn o t a t i o nl a n g u a g e ) 进行类型转换。其内部 提供了基本和常用对象的转换器。 7 ) 数据校验 s t r u t s 2 支持通过v a l i d a t e 方法和x w o r k 校验框架来进行校验。x w o r k 校验框 架的使用作为属性类型定义的校验和内容校验,来支持c h a i n 校验子属性。 1 3主要工作及论文结构 1 3 1主要工作 本文的目标是建立一个基于l u c e n e 的全文搜索引擎,能够针对具体的应用环 境,解析文本,建立索引,并且提供搜索服务。同时,结合目前最常用中文分词 技术,使l u c e n e 对中文能有很好的支持。并且还根据不同的中文分词方法,实验 并得出不同分词方法在性能以及使用环境上的优缺点,最后总结以及展望未来搜 索引擎以及分词技术的发展方向。 1 3 2论文结构 第一章:介绍了研究背景、意义、研究现状及涉及到的技术的介绍。 第二章:对开源的全文搜索引擎l u c e n e 进行全面研究,分析其组织架构,索 引数据格式,系统实现原理等。 第三章:中文分词的相关技术介绍,主要分析了当前主流的分词思想以及分词 中亟待解决的问题。 第四章:全文搜索引擎实现分析与设计。先总体概述全文检索基本原理、特征、 构建过程等,结合中文分词技术的使用,构架出一个全文搜索引擎的总体框架。 第五章:全文搜索引擎实现。依据第三章的设计,分别实现文档解析模块,索 引模块,搜索模块,以及用户界面模块。 第六章:系统的全面测试。根据已经实现的全文搜索引擎系统,结合不同的中 文分词技术,分析不同分词技术的性能及其优劣。 第七章:总结和展望未来技术发展的方向。 1 4本章小结 本章系统分析了本文研究的目的和意义,同时简要介绍了要系统中所涉及到的 主要技术,并且简略的介绍本文的组织结构,为下文的详细介绍做好铺挚。 4 2l u c e n e 的全面分析 2 il u c e n e 的结构分析 2 1 1l u c e n e 的总体架构 l u c e n e 本身的架构具有良好的面向对象的特征。它定义了平台无关的索引文 件,并且将系统的核心组件抽象成了几个独立的部分,具体的平台实现部分设计 为抽象类的实现【5 】。此外,l u c e n e 也把与具体平台相关的部分的实现也封装为类, 比如文件存储类,文本分析类等等。经过层层的面向对象式的处理,最终实现了 一个低耦合、高效率、易扩展的检索系统。 从系统架构的角度来分析,l u c e n e 采用非常经典的三层架构模式,这三层分 别是:表现层,业务逻辑层以及数据持久层。其中,表现层主要关注的是用户的 u i 层,负责和用户交互;业务逻辑层主要提供对外调用的接口,实现基本的业务 逻辑。数据持久层负责对数据的封装,以及索引的建立。l u c e n e 的整体结构图如 图2 1 所示: 图2 - 1l u c e n e 总体结构图 f i g 2 1a r c h i t e c t u r eo fl u e e n e 5 从总体结构可以看出,l u c e n e 的工作方式主要分成两大块: 1 ) 索引的建立 索引建立是通过数据收集器,收集各种数据,包括文件系统中的数据,数据库 数据,用户输入的数据,网页数据等等,然后通过索引分析器,对数据建立索引, 之后存入索引数据库。 2 1 数据的检索 数据的检索从用户的输入文本出发,通过文本分析器的处理,把输入的文本转 化成多个关键字,通过关键字,去索引数据库中寻找对应的数据,找到数据之后 把结果返回给用户。 综上所述,l u c e n e 工作方式的非常简单明了,原因是其内部封装了相当复杂 的处理逻辑,下文会深入l u c e n e 源码,继续详细分析l u c e n e 的实现方式。 2 1 2l u c e n e 的包结构 l u c e n e 的包结构定义的比较清晰明确,但是各个包的功能比较独立,而且复用 性强,并且包命名非常规范,非常恰当的体现了这个包的功能。l u c e n e 源码中共 包括八个子包,这八个包的功能及作用如下表所剥3 】: 表2 - 1l u c e n e 包结构说明 t a b l e2 - 1i n s t r u c t i o n so fl u c e n e sp a c k a g es t r u c t u r e 包名作用 o r g a p a c h e 1 u c e n e a n n y s i s 语言分析器,主要用于切词 o r g a p a c h e 1 u c e n e d o c u m e n t 索引存储时的文档结构管理 o r g a p a c h e 1 u c e n e q u e r y p a r s e r 查洵分析器,实现查洵关键词间逻辑运算 o r g a p a c h e 1 u c e n e s e a r c h 检索管理,根据查询条件,得到检索结果 o r g a p a c h e 1 u c e n e s t o r e 数据存储管理,主要包括一些底层的f o 操作 o r g a p a c h e 1 u c e n e u t i l 工具包,包括高亮关键字等 o r g a p a c h e 1 u c e n e i n d e x 索引管理,包括索引建立、删除等 o r g a p a c h e 1 u c e n e m e s s a g e s 本地语言支持和软件系统国际化 在上述的八个包中,o r g a p a c h e 1 u c e n e a n n y s i s 是最核心的包,同时,也是本文 在对l u c e n e 进行中文分词的扩展时,所要用到的包,具体的包结构如图2 2 所示: 6 图2 2a n a l y z e r 类图 f i g 2 2c l a s sd i a g r a mo f a n a l y z e r a n a l y z e r 类是一个抽象类,它内部包含了一些抽象方法,用来处理文本的字符 流( t o k e n s t r e a m ) ,根据具体应用情况,可以选择不同的子类来进行实现。 例如,s t a n d a r d a n a l y z e r 是标准的分词器,它继承自a n a l y z e r 类,主要是用来 实现英文语言的分词的,对于中文,它无法正确的进行分词。如果我们要对中文 进行分词,就可以自己创建一个c h i n e s e a n a l y z e r ,让他继承a n a l y z e r 类,同时实 现a n a l y z e r 类中的方法,主要,具体的分词目的就达到了。具体如图2 3 所示: 图2 - 3a n a l y z e r 中文分词类图 f i g 2 - 3c l a s sd i a g r a mo f c h i n e s ea n a l y z e r 7 2 2l u c e n e 的索引技术 索引是全文搜索引擎的核心,l u c e n e 在索引方面的做了多方面的工作,它采 用结构化,层次化的的方式来处理索引,并且还使用了许多技巧来优化索引的存 储和检索,索引的优化处理使得整个系统的运行更加高效。 2 2 1索引操作的类结构 在l u c e n e 这个开源全文检索工具包中,对索引的操作都集中在i n d e x 包中, 其中,i n d e x m o d i f i e r 类封装了索引的增加、删除、修改等操作。而具体实现索引 的添加的类是i n d e x w r i t e r ,实现索引读取的类是i n d e x r e a d e r ,i n d e x m o d i f i e r 类依 赖于i n d e x w r i t e r 和i n d e x r e a d e r 类,具体的关系如图2 - 4 所示: i n d e x m o d i f l e r + i n d e x w r i t e f :i n d e x w r i t e r + k d e x r e a d e rl n d e x r e a d e r + h f f o s t r e a m :p r i n t s t r e a m + u s e c o m p o u n d f f i e :b o o l e a n + m a x b u f i e r e d d o c s :m t + m a x f f i e d l e n g t h :m t + i n d e x m o d i f i e r ( d i r e c t o r y , a n a l y z e r , b o o l e a n ) + a d d d o c u m e m ( d o c u m e n t , a | r a b , z e r ) + a d d d o c u m e n t ( d o c u m e n t ) + d e l e t e d o c 眦x m t s ( t e r m ) + o p t i n f i z e 0 、 l、j i n d e x r e a d e r i n d e x w r i t e r + o p t i o n :s t m g 雨 + f i e l d o p t i o n ( ) 队 i 硼n e r l n r i x l d h c t o r y n d e x r e a d e r l d l e e a d e n x m u l t l r l a p a m h e 瓜e a d e r i rf m u l t i s e g m e n t r e a d e r ls e g m e n t r e a d e r l 争咬 ir e a d o n l y m u l f i s e g m e n t r e a d e r ir e a d o n l y s e g m e n t r e a d e r l 图2 - 4 索引的类图 f i g 2 - 4c l a s sd i a g r a mo f l n d e x 由上图可以看出,l u c e n e 对索引的读取操作十分复杂,可以多种方式进行读 取,如过滤读取,目录式读取,内存式读取,平行读取,混合读取等多种方式, 为不同的搜索服务提供不同的索引读取方式,最大限度的提高检索效率。 相对索引读取的方式来说,添加索引的方式就比较固定,只有添加到文件系统 或者添加到内存中的区别,这两种方式各有利弊,一般都是结合起来使用,以发 挥其最大的功效。 2 2 2索引的组织结构 使用l u c e n e 进行索引创建后,索引文件是存储在磁盘文件中的。其在磁盘中 的存储组织形式呈五层结构,属于包含关系,从外到内依次是:索引文件( i n d e x ) 、 图2 5l u c e n e 索引结构图 f i g 2 5a r c h i t e c t u r eo f i n d e xi nl u c e n e 9 索引文件( i n d e x ) 索引文件包括所有的索引信息,词典文件( t e r md i c t i o n a r y ) 、词频文件 ( f r e q u e n c i e s ) 、字符位置文件( p o s i t i o n s ) 、段( s e g m e n t ) 、文档( d o c u m e n t ) 等 等,l u c e n e 的检索接口可以通过内部查询类,直接调用索引文件,完成各种查询。 段( s e g m e n t ) 多个段构成了索引文件,每个段都是独立的,可以进行查询。段是由多个文档 ( d o c u m e n t ) 合并形成,l u c e n e i n d e x 包中的m e r g e f a c t o r y 属性可以控制文档合 并成段的频率。l u c e n e 的默认值是每加入1 0 份新文档就从内存往磁盘上的索引文 件写入并生成一个段。 文档( d o c u m e n t ) 一个文档和类似于数据库表中的一行记录,新文档在加入到索引库中时,l u c e n e 会为其分配一个唯一的文档号。 域( f i e l d ) 多个字域组成了一个文档,每个字域有一个字域名,同时有相对应的值。字域 有不同的属性,索引型( i n d e xt y p e ) 的字域,可以对该字域中的数据进行检索; 索引存储型( i n d e xs t o r e t y p e ) 的域,其中数据不但可以做索引,而且还可以直接 从索引文件中返回其值,同时,还能选择存储域的时候进行压缩处理。 项( t e r m ) 项是索引中最小的数据项,同时也是进行信息检索时,最小的查询单位。 2 2 3索引的数据结构 l u c e n e 索引文件中,用以下基本数据类型来保存信息: b y t e :是最基本的类型,长8 位( b i t ) 。 u i n t 3 2 :由4 个b y t e 组成。 u i n t 6 4 :由8 个b y t e 组成。 v i n t :变长的整数类型,它可能包含多个b y t e ,对于每个b y t e 的8 位, 其中后7 位表示数值,最高1 位表示是否还有另一个b y t e ,0 表示没有,1 表示有。 越前面的b y t e 表示数值的低位,越后面的b y t e 表示数值的高位【3 】。 例如:1 3 0 转化为二进制形式为1 0 0 0 ,0 0 1 0 ,总共需要8 位,一个b y t e 不能 表示,因而需要两个b y t e 来表示,第一个b y t e 表示后7 位,并且在最高位置1 来 表示后面还有一个b y t e ,所以为( 1 ) 0 0 0 0 0 1 0 ,第二个b y t e 表示第8 位,并且最高 位置o 来表示后面没有其他的b y t e 了,所以为( 0 ) 0 0 0 0 0 0 1 。 c h a r s :是u t f 8 编码的一系列b y t e 。 1 0 s t r i n g :一个字符串首先是一个v i m 来表示此字符串包含的字符的个数, 接着便是u t f 8 编码的字符序列c h a r s 。 2 2 4索引的建立模式 l u c e n e 的索引建立模式完全独立于操作系统和各种数据格式,它只接收文本 形式的数据,为其建立索引。这就意味着除文本外的其它格式数据,就需要进行 转换,得到其中的文本后,才能使用l u c e n e 为其创建索引。由此我们可以把l u c e n e 的索引建立模式分成三个部分: 1 、文本提取部分。这个部分负责把多种格式的数据进行提取,包括h t m l 、 d o c 、p d f 、x m l 等格式以及数据库中的数据。提取这些数据源中的数据,得到 文本格式数据。通常这部分工作可以通过一些已有的插件完成。 2 、文本解析部分。这个部分负责把提交给l u c e n e 的文本进行解析,进行文本 的预处理,完成无意义的词、标点符号等的过滤;进行分词,解析出索引项,词 频等相关信息。 3 、索引存储部分。这部分的工作是把解析出来的各种索引信息,按照一定的 数据结构,存储在磁盘上。 待索引的文件 文件流二二二二二 一一 流 索引库存储 。_ _ _ _ - 。- 。_ _ _ _ - 。_ _ - 。- - _ _ _ _ _ - - 。_ 。- 。- 。- 。- _ _ _ - 。1 。 图2 - 6 建立索引的数据流图 f i g 2 - 6d a t a f l o wd i a g r a mo fc r e a t i n gi n d e x 2 2 5索引的优化方法 l u c e n e 为了使的信息的存储占用的空间更小,访问速度更快,采取了一些特 殊的优化技巧,这些技巧非常巧妙,不易理解,但是对于理解l u c e n e 的索引存储 却是由很重要的作用。具体有如下几个优化【1 8 】: l 、前缀后缀规贝j j ( p r e f i x +

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论