




已阅读5页,还剩43页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
长春理工大学硕士学位论文原创性声明 本人郑重声明:所呈交的硕士学位论文,基于l u c e n e 搜索引擎技术的研究 与改进是本人在指导教师的指导下,独立进行研究工作所取得的成果。除文中 已经注明引用的内容外,本论文不包含任何其他个人或集体已经发表或撰写过的 作品成果。对本文的研究做出重要贡献的个人和集体,均已在文中以明确方式标 明。本人完全意识到本声明的法律结果由本人承担。 作者签名:鳓丛 塑! q 年巫月_ 1 2 - b 长春理工大学学位论文版权使用授权书 本学位论文作者及指导教师完全了解“长春理工大学硕士、博士学位论文版 权使用规定”,同意长春理工大学保留并向中国科学信息研究所、中国优秀博硕 士学位论文全文数据库和c n k i 系列数据库及其它国家有关部门或机构送交学位 论文的复印件和电子版,允许论文被查阅和借阅。本人授权长春理工大学可以将 本学位论文的全部或部分内容编入有关数据库进行检索,也可采用影印、缩印或 扫描等复制手段保存和汇编学位论文。 作者签名:鳕咝 导师签 型! 年堕月旦日 红旦年上月2 日 摘要 随着互联网的普及,各种各样的繁多的信息在互联网上传播和存在,人们越来越多 的喜欢使用互联网来获取信息,因此,如何在纷繁复杂的上万上亿的信息里,快捷而 准确的获取自己所需要的信息呢? 由此搜索引擎技术应运而生。 搜索引擎是指能在互联网上搜集并检索出用户需要的信息的系统,该系统主要由 三部分组成:信息搜索、信息整理、用户查询。 l u c e n e 是由a p a c h 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 在 检索结果排序方面也有不足之处,提出一种按出现的检索关键字的个数、检索关键字 在文中出现的位置、频率等几种权重指标来对结果排序的算法;接着介绍用j a v a 语言 实现一个用于在网络上搜集信息的模块设计原理和流程;最后,实现一个完整的搜索 引擎,从而对l u c e n e 在中文分词和结果排序算法改进进行测试和评价。 关键词:搜索引擎l u c e n e 中文分词排序 a b s t r a c t a st h ei n t e m e ti sm o r ea n d m o r ep o p u l a r ,a l lk i n d so fc o m p l i c a t e di n f o r m a t i o na r e e x i s t e da n ds p r e a d e d ,m o r ea n dm o r ep e o p l ep r e f e rt ou s ei n t e m e tt og e ti n f o r m a t i o nt h e y w a n t t h u s ,h o wt oe x a c t l ya n dq u i c k l yg e ti n f o r m a t i o ny o uw a n ti nt h et h o u s a n d so f i n f o r m a t i o n ? a sar e s u l t ,s e a r c he n g i n ei sb o r n s e a r c he n g i n ei sas y s t e m ,t h a tc a l lc o l l e c ta n df i n dt h ew a n t e di n f o r m a t i o ni nt h e i n t e m e t t h es y s t e mc o n t a i n st h r e ep a r t s :c o l l e c ti n f o r m a t i o n ,s e a r c hi n f o r m a t i o n ,u s e rm q u i r l u c e n ei sao p e n s o u r c e ,f u l l - f e a t u r et e x tt o o l ep a k a g es u p p o r t e d b ya p a c h e s o f t e r w a r ef o u n d a t i o n s oi ti s n tf u l l - f e a t u r et e x ts e a r c he n g i n eb u ti saf u l l f e a t u r et e x t a r c h i t e c t u r e a sl u c e n eh a v e n ts e a r c hi n f o r m a t i o nm o d a ll i k ei n t e m e tc r a w l e r ,s ot h ep a p e rw i l l d e s i g nam u l t i t h r e a dm o d a lt oc o l l e c t i n f o r m a t i o n t h ep a p e rw i l lf r i s ta n a l y s et h eo p e n s o u r c e ,f u l l - f e a t u r et e x tl u c e n e s a r c h i t e c t u r e s e c o n d l y ,a n a l y s et h ed i s a d v a n t a g eo f t h eh c e n ei nt h es e g e m e n t i n gt h ec h i n e s e w o r d ,a n dd e s i g na l lc h i n e s ew o r ds e g c m c n t e ra l g o r i t h mb a s i c i n gd i c t i o n a r yq u i c k l y s e a r c h i n g ,a ta no t h e rh a n df o ra n o t h e rd i s a d v a n t a g ei nt h es o r t i n gt h es e a r c h er e s u l t s ,i 1 1 p r o v i d ea ns o r t i n ga l g o r i t h m ,w h i c hi ss o r t e db yt h el o c a t i o no ft h ek e y w o r d s ,t h en u m b e ro f t h ek e y w o r do c c u r r e n c e s ,f r e q u e n c ya ss o t h e nw i l li n t r o d u c et h ep r i n c i p l e sa n dp r o c e s s e s o fd e s i g nt h ef u n c t i o nm o d a lw h i c hc a ns e a r c ht h ei n f o r m a t i o ny o uw a n t e di nt h ei n t e m e t u s i n gj a v al a n g u a g e a tl a s t ,i 1 1r e a l i z ea ni n t e g r a t e ds e a r c he n g i n ei no r d e rt ot e s ta n d e v a l u a t em yi m p r o v ei n t h ec h i n e s ew o r ds e g e m e n ta n dt h es o r t i n gr e s u l t s k e y w o r d s :s e a r c he n g i n e r l u c e n ec h i n e s ew o r ds e g e m e n t o r d e r i n g 目录 摘 要 a b s t r a c t 目录 第一章绪论l 1 1 搜索引擎发展及分类1 1 2 本论文的主要内容2 1 3 论文的整体架构2 第二章开源全文搜索引擎l u c e n e 的详细分析。4 2 1 搜索引擎的核心和基本架构。4 2 2l u c e n e 简介5 2 3l u c e n e 的优点1 l 2 4l u c e n e 包结构6 2 4 1l u c e n e 各包的功能:6 2 5l u c e n e 核心原理7 2 5 1l u c e n e 整体流程:8 2 5 2l u c e n e 核心类9 2 6 搜索引擎的重要技术指标1 3 2 7l i j ( e n e 倒排索引技术1 2 第三章l u c e n e 中文分词算法的改进1 5 3 1 几种经典的分词算法分析1 5 3 1 1 三种分词算法优劣比较1 5 3 2l u c e n e 分词原理1 7 3 3 改进l u c e n e 中文分词方法。18 第四章l u c e n e 检索结果排序算法的改进2 l 4 1l u c e n e 原检索结果排序算法介绍2 1 4 2 对l u c e n e 检索结果排序算法改进2 1 4 2 1g o o g l e 检索排序算法21 4 2 2 检索关键词在页面中的位置2 2 第五章多线程的信息抓取系统分析和设计2 4 5 1 多线程的信息抓取系统的设计2 4 5 1 1 多线秸l 2 4 5 1 2 线程同步2 5 5 2 多线程信息抓取系统的关键技术2 6 5 2 1h t m l p a r s e r 2 6 5 3 信息抓取系统的搜索策略2 9 5 4 资源池3 0 5 5 多线程信息抓取系统结构和模块。3 0 5 5 1 资源解析模块的详细设计3 0 5 6 改进的中文分词算法的实现3 1 5 6 1 改进的中文分词算法的关键技术3 l 5 7 改进的结果集排序算法3 4 5 8w e b 搜索系统的灾现3 4 5 9 系统雨点、难点3 6 5 9 1 信息搜索系统对网页信息的提取3 6 5 9 2 词表索引3 7 5 9 3 线程管理3 7 5 9 4 影响网页检索结果排序算法的因素和各因素权值的设定。3 8 第六章结束语3 9 致 谢4l 第一章绪论 1 1 搜索引擎发展及分类 随着网络应用的普及,越来越多的人们使用互联网,互联网上的资源和信息也越 来越丰富,因此搜索引擎正是为了满足用户在上万的信息海洋中,快速而准确的找到 所需要的信息而产生的。 从1 9 9 0 年起,当时万维网还未出现,曾有过a r c h i e 、g o p h e r 等搜索工具,到之 后互联网的出现,y a h o o 目录诞生了,之后的l y c o s 、i n f o s e e k 、m e t a c r a w l e r 、a l t a v i s t a 、 g o o g l e 、搜狐、百度等等,搜索引擎技术经历了不到二十年的发展,在这短短二十年 的发展过程中,以g o o g l e 急速的发展最为耀眼和突出,使得全球互联网6 0 以上的用 户都使用该搜索引擎n 3 。g o o g l e 不仅使查询的速度更加快,使查询结果更加贴近用户 的需求,而且使得用户以任何方式更加多样。目前g o o g l e 不仅实现全球各个国家的本 土化,而且推出了各式各样的个性化的搜索引擎,如:音乐搜索、图片搜索、图书搜 索、地图搜索等等,这也使得全球各大公司争相效仿。在国内的百度也是后期之辈, 成为中文搜索引擎的佼佼者,与此同时国内的各大门户网站也都推出了自己的搜索引 擎,如新浪的爱i 、u j 、网易的有道、搜狐的搜狗等等,可见搜索引擎已经成为了当今互 联网的一个必胜法宝。总的来说,搜索引擎发展方向大概是以下几个方面幢3 : ( 1 ) 数据挖掘与数据检索 搜索引擎技术就是从浩瀚的互联网中搜索到用户需要查询的信息,而数据挖掘技 术也正是从大量的数据发现数据中隐藏的信息和趋势,从而对未来的发展趋势作出判 断。因此搜索引擎可以利用数据挖掘技术来检索到用户需要的以及潜在需要的信息。 ( 2 ) 交互性 搜索引擎的输入口是用户与搜索引擎的很重要交互界面,一方面让用户输入更加 准确具体的查询关键词,查询就更准确更快捷;另一方面通过这种交互性的操作增加 了用户体验,通过从用户输入的习惯和查找信息的范围和频率,来为用户定制一些特 定的网站,这样从而更加能吸引用户的使用。 ( 3 ) 个性化 从搜索的范围的角度出发,可以把搜索的内容限定在某个区域,这样既可以缩小 搜索范围,又可以满足用户的特定需求,例如:音乐搜索、图书搜索等等。 ( 4 ) 本土化 当搜索引擎走向国际化的过程中,由于每个国家的文化背景、语言特点、道德 观念等的不同都将导致搜索引擎的用户输入大不相同,因此本土化的需求越来越明显 和迫切。 ( 5 ) 智能化 在当今信息膨胀的时代,智能化j 需求越来越强烈,在图像i 只别和语音识别米搜 索用,、需要的信息也是术米搜索引擎发展的方向。 搜索引擎按其工作方式主要可分为三种协1 ,分别是全文搜索引擎( f u l lt e x ts e a r c h e n g i n e ) 、目录索引类搜索引擎( s e a r c hi n d e x d i r e c t o r y ) 和元搜索引擎( m e t as e a r c h e n g i n e ) 。 全文搜索引擎( f u l lt e x ts e a r c he n g i n e ) ,最具流行和代表性的有g o o g l e 、 f a s t a 1 1 t h e w e b 、百度。它们都是通过从因特网上抽取各个网站的信息( 以网页文字 为主) 而组建的数据库中,检索和用户查询关键词匹配的相关记录,然后按一定的排 序序列将结果返回给用户,因此他们是真正的搜索引擎。 目录索引类搜索引擎( s e a r c hi n d e x d i r e c t o r y ) 虽然有搜索功能,但在严格意 义上算不上是真正的搜索引擎,仅仅是按目录分类的网站链接列表而已。最具有代表 性的就是y a h o o ,国内的搜狐、新浪、网易搜索也都属于这一类。 元搜索引擎( m e t as e a r c he n g i n e ) 是在接受用户查询请求时,同时在其他多个 引擎上进行搜索,并将结果返回给用户。具有代表性的元搜索引擎有i n f o s p a c e 、 d o g p i l e 等等。 1 2 论文的研究意义 ( 1 ) 搜索引擎技术作为数据挖掘应用的一个分支,它的发展将推动整个数据挖掘技 术在实际的应用发展。 ( 2 ) 互联网信息爆炸式增长,使得搜索引擎技术的快速发展显得越来越迫切,人们 急需搜索引擎从数亿的网页中找到自己最需要的信息,从而减少宝贵的时间和资源。 ( 3 ) 搜索引擎的技术的研究也可以增加我国互联网技术在搜索引擎领域的优势,增 。强我国在国际高科技产业中的综合实力。 t ,1 3 论文主要的研究内容 :本文主要是在深入研究搜索引擎的特点,并详细分析开源的全文搜索引擎l u c e n e 检索以及排序的原理和核心,针对它在中文分词算法的不足,提出一种基于字典快速 :的粗粒度的中文分词算法,另一方面,针对l u c e n e 在检索结果排序方面的不足,对原 1有结果排序算法增加了关键字因子以及关键字在文本中位置因子等相关因子进行改 进,最后实现了一个完整的全文搜索引擎系统,并对改进后的中文分词算法和排序算 法进行测试和评价。 1 4 论文的整体架构 , 论文整体架构安排如下: 第一章,绪论 3 第二章开源全文搜索引擎l u c e n e 的详细分析 2 1 搜索引擎的基本结构 搜索引擎畸1 是指能在互联网上搜集并检索出用户需要的信息的系统。随着网络信 息的与日俱增,人们越来越需要一种更加快速而准确的人性化的工具搜索出所需要的 信息,并且希望能对信息进行一定的加工。 目前搜索引擎一般有两种搜索策略:( 1 ) 从一个起始u r l 集合开始,顺着这些 u r l 中的超链接,以广度优先、深度优先或者启发式方式循环地搜索信息。例如:可以 从一个固定的起始u r l 开始,然后顺着该u r l 中包含的超链接遍历。( 2 ) 可以按照域 名或者i p 地址来进行在一定区间进行有穷的搜索。 搜索引擎基本结构如图2 1 所示: 图2 1 搜索引擎基本结构图 搜索引擎。一般包含三个部分协1 :信息搜索、信息整理、用户查询。信息搜索即信 息采集器,主要复杂在互联网上智能的检索新的信息;信息整理即对采集后的信息进 行分类和分析,可以把它的任务细分为分析索引和捡索;用户查询就是提供给用户查 4 询信息的接口。因此按三个主要的功能分可以把搜索引擎分成:索器、检索器、用 户接u 。 索引器的功能是分解搜索器所搜索的信息,从中提取出重要的信息,建立索引项, 从而建立一个可供查询的索引表。索引项有客观索引项和内容索引项两种:客观索引 项是指与文档的语意的具体内容没有直接联系,如作者名、u r l 、更新时间、编码、长 度等等;内容索引项是指反映文档内容,表述文档内容的实际含义,如标题、文章中 的关键词、文章中的大写等等。内容索引项又可以分为单索引项和多索引项。对于英 文来说,英文之间是用空格来间隔每个单词的:而对于中文等连续书写的语言,必须 对词语进行切分。 索引表是使用倒排表,即由索引项查找相应的文档信息。索引表有时要记录索引 项在文档中出现的位置,以便检索器计算索引项直接的相邻或接近关系,同时也便于 在显示检索结果时可以快速定位。 检索器的功能是根据用户的查询在索引库中快速检索出文档的信息,进行文档与 查询的相关度评价,对将与用户查询输相关性出的结果按一定的规则进行排序。 用户接口的作用是输入用户查询、显示查询结果、提供与查询结果相关性较高的 结果。主要目的是方便用户使用搜索引擎,使得搜索引擎更加高效、准确的提供信息 检索服务。 2 2l u c e n e 简介 l u c e n e 是由a p a c h e 软件基金会支持和提供的一套开放源代码的用于全文检索引 擎工具包,即它不是一个完整的全文检索引擎,而只是一个全文检索引擎的架构,它 可以方便的嵌入到各种应用中实现针对应用的全文索7 1 检索功能,它的设计目标是为 各种中小型应用程序加入全文检索功能盯3 。 l u c e n e 是一个基于j a v a 的全文信息检索的工具包,它并不是一个完整的搜索应 用系统,而是为你的应用程序提供索引和搜索功能。l u c e n e 作为a p a c h ej a k a r t a 家族 中的一个开源项目的子项目,也是当前最具代表性的基于j a v a 开源全文检索工具包。 目前许多应用程序的搜索功能基本上是基于l u c e n e 实现的,比如e c l i p s e 的帮助 系统的搜索功能。l u c e n e 主要是对文本类型的数据建立索引,因此只要能把你要索引 的数据格式转化成文本类型的,l u c e n e 就可以对该文档进行索引和搜索。例如准备对 一些h t m l 文档或者p d f 文档进行索引的话你就首先需要把h t m l 文档或p d f 文 档转化成文本格式的,然后将转化后的内容交给l u c e n e 进行索引,然后把创建好的 索引文件保存到磁盘或者内存中,最后根据用户输入的查询条件在索引文件上进行查 询。 l u c e n e 早先发布在作者自己的w w w 1 u c e n e c o m ,后来发布在s o u r c e f o r g e ,2 0 0 1 年年底成为a p a c t t e 基金会j a k a r t a 的一个子项目: h t t p :j a k a r t a a p a c h e o r g l u c e n e 。 5 2 3l u c e n e 包结构 l u c e n e 包结构如图2 2 所示: 巍国 酝国增簟加 翰磁枞 籀国蛾1 ”i t 黝国“鞭戗t 兹国i 缸d “ 瀚 骛蚋雕妒。l 盯 翰国墨r 谯 繇露s t o r e 辫国u t i l 图2 2l u c e n e 包结构 从图中可以很容易看出,l u c e n e 搜索引擎的架构也遵循了搜索引擎的设计架构, l u c e n e 包含了四大模块:文本分词模块、文本索引模块、索引存储模块、搜索模块。 1 文本分词模块的主要功能是把输入的文本分成一个个可供文本索引模块的“词 语,因为只有把文本细化成一个个索引系统能识别的“词语,这样才便于优化存 储文件和查询用户所需的文件。 2 文本索引模块的主要功能是对文本分词模块已经分好的一些词进行优化存储,因 为如果把每个词语都按“原型 存储,这样既占用磁盘空间,又不便于用户的检索。 3 索引存储模块的主要功能是把文本分词模块的“词转化成相应的内存中的输入 输出流,一般进行存储和检索。 4 搜索模块的主要功能是提供用户检索的接口,它可以提供按不同的查询的条件进 行查询,提供查询的结果和对结果的一些参数的分析和显示,例如:查询所花的时间、 与用户输入相关的结果数等等。 2 3 1l u c e n e 各包的功能 l u c e n e 各包详细功能介绍,如表2 - 1 : 6 表2 - 1l u c e n e 包结构表 包名包的功能 o r g a p a c h e 1 u c e n e a n a l y s is解析语言,进行分词 o r g a p a c h e 1u c e n e d o c u m e n t对索引存储的数据结构的管理 o r g a p a c h e 1u c e n e in d e x对索引管理,包括读取索引,索引的合并 o r g a p a c h e 1u 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对索引和检索相关的数据结构存储管理 o r g a p a c h e 1 u c e n e u ti1用到的一些工具类 2 4l u c e n e 核心原理 l u c e n e 全文检索主要包括两大块:一是对现有的文本数据进行分词,并按照一定的 数据结构存储;二是对查询的关键进行检索,也就是对查询的文本进行分词,然后在 已好分词的文本数据结构中检索出结果,并按一定的策略排序结果。 l u c e n e 系统结构图,见图2 3 7 图2 3l u c e n e 系统结构图 2 4 1l u c e n e 整体流程 ( 1 ) 建立索引逻辑 建立索引就是需要把已有的文档信息,即在互联网上抓取搜集到的网页信息,经 过l u c e n e 的语言分析器进行分词后,形成的一定的数据结构文件。建立索引主要包括 如下过程: 1 对需要索引的字段建立索引,在此期间将对这些要建立索引的信息进行分词, 分词的规则由语言分析器( a n a l y z e r ) 完成。 2 对建立好索引的组织成供查询的一种具有索引结构的数据结构的文件。 ( 2 ) 查询逻辑 1 对查询的信息进行分词,由搜索器( s e a r c h e r ) 根据这些分词后的单元,在已 建立好的索引树中查找到对应的信息 2 对查询到的结果集用结果分析器( s c o r e r ) 对所查找到的结果进行评分,从而按 照最后值的评分高低依次排列。 8 2 4 2l 1 1 c e r e 核心类 1 核心索引类 核心索引类主要是负责对文本信息进行分词,并对切分后的词建立索引,查询时 就只需要遍历这些索引,而不需要去遍历整个正文,就可以找到所需要的信息,从而 很大程度上提高了检索的效率,下面详细介绍一些核心类: ( 1 ) i n d e x w r it e r 8 1 主要是把一个新的索引添加到已有的索引中,在它的构造方法里需要三个参数: 存放索引文件的路径、语言分析器和是否需要创建索引。 ( 2 ) a n a l y z e r 文本信息在进行索引之前,就需要进行最重要的步骤:分词,那么a n a l y z e r 就是 在i n d e x w r i t e r 的构造函数中一个非常重要的参数,它用来过滤一些与检索和建立索 引无关的数据,比如标点符号、空格以及用户自定义的于将要建立的索引无关的数据。 当进行分词过程中遇到这些字符或数据时,就跳过它们,因此这一方面提高了检索的 效率,另一方面,节省了存储的空间。所以一个好的语言分析器对于检索效率起着至 关重要的作用。对于英文来说,由于一句话中英文之间是用空格符分开的,因此分词 也就很简单,只要按空格取单词即可,但是同样英文中有常用短语,这时在分词的时 候就需:耍一个包含比较全面的词库米进行匹配分词。但对于中文而言情况就不太一样 了,因为中文之间没有空格,每个字与字之间是相连的,最笼统的方法就是对每一个 词进行分字,也就是把每个汉字当做一个索引,这样显然会带来匹配的效率太低,准 确率不高,因此我们这时也需要一种词库,词库中应包含比较全面的词语,分词的时 候与该词库匹配分词,那么词库包含的词越多越高,那么分词就会越准确。另一方面, 它是一个抽象类,提供一些可继承和可重写的方法。l u c e n e 包中有好几个类已经实现 了该类,例如:s t a n d a r d a n a l y z e r 。另外,可以根据项目的需要自己继承它,改进它 的效率从而可以在项目中更好的发挥l u c e n e 的作用。 ( 3 ) d o c u m e n t 它的作用就相当于数据库中的一条记录,负责管理和组织字段( f i e l d ) ,对于需 要建立索引的文本信息,可以将与检索有关的信息建立多个字段,例如:标题、内容、 时间等等都可以作为字段。从而使得检索更加准确,但是过多的字段同时也会使得在 检索时间上耗费较大,因此应权衡之间的利弊。当d o c u m e n t 的数量达到一定限度时, 这时l u c e n e 会自动建立一个s e g e m e n t 的文件。 ( 4 ) f i e l d 它相当于数据库中每条记录中的每个字段,可以为不同的文本建立不同属性的字 段,它的构造方法里有多个参数,其中最重要的两个参数,一个是是否存储,即是否 存储在磁盘中,另一个是是否进行索引,也就是说如果该字段需要索引,那么就要对 该字段的值进行分词,否则的话就不要进行分词处理,从而为整个系统的运行节省了 时间和空间。 9 ( 5 ) q u e r y p a r s e r 该类主要是负责对查询的文件进行解析,它最重要的一个方法就是p a r s e ( s t r i n g q u e r y ) ,该参数的函数就是查询的一系列规则,该规则的前缀可能包含“+ 、“一, 紧接着就是要要查询的短语,后面有一个冒号分隔,后面可以有多个短语,它能使得 查询可以在多个字段中进行搜索,规则阳1 如下: q u e r y := ( c l a u s e ) 木 c l a s u e := “+ , 一 :” ( i ”( q u e r y ”) ) 在一般的应用中,这些查询语句分析功能不太实用。 ( 6 )i n d e x s e a r c h e r 该类是l u c e n e 中最重要的检索核心类,既然它是索引类,那么那的构造参数一定 有一个参数是指明存放索引位置,因此它的构造函数就是i n d e x s e a r c h e r ( d i r e c t o r y d i r e c t o r y ) :当然了还有另外的一种构造方法i n d e x s e a r c h ( i n d e x r e a d e rr ) ,该方法中 的参数i n d e x r e a d e r 就是对已建立好的索引进行读取它的数据流。 i n d e x s e a r c h e r 最重要的方法就是s e a r c h ( q u e r yt e r m ) ,参数是就是要查询的关键 字构建的一个l u c e n e 的数据结构,一般我们用t e r m q u e r y ,而它的构造函数又需要类 t e r m ,该类就是负责你所查询的关键字是在索引的那个字段里去查找,构造函数为 t e r m ( s t r i n gf i e l d ,s t r i n gt x t ) ,第一个参数就是搜索的字段,第二个参数就是你所 查询的关键字。下面给一个实例来具体说明: i n d e x s e a r c h e rs e a r c h e r = n e wi n d e x s e a r c h e r ( p a t h ) : p a t h 表示的就是索引文件存放的路径。 t e r mt e r m = n e wt e r m ( “t i t l e , j a v a ”) : q u e r yq u e r y = n e wt e r m q u e r y ( t e r m ) : hitshis = s e a r c h e r s e a r c h ( q u e r y ) : 从以上示例中我们可以看出t e r m 是搜索的最小单元,由它来负责构建查询,然后 与t e r m q u e r y 一起构成检索的数据结构,最后i n d e x s e a r c h e r 就根据这样的数据结构 在索引文本中找到对应的信息,然后返回结果集h i t s ,该结果集是与查询的关键字相对 应的多个d o c u m e n t 的集合,通过每个d o c u m e n t 对象,我们就可以知道该索引的各种 信息,例如:它的字段名、权值等等信息,而h i t s 有一个很重要的方法就是s c o r e ( i n t n ) ,通过该方法我们就可以了解到搜索到的这个d o c u m e n t 在整个结果集中的权重,因 此,我们就可以根据它来判断哪些结果更为重要,这就是与后面章节结果集排序有关, 这里就不赘述了。 ( 7 ) d i r e c t o r y 该类是一个抽象类,它就是l u c e n e 存储数据的父类,一旦创建,它要么能被读, 要么被写。它有两个重要的子类:f s d i r e c t o r y 和r h m d i r e c t o r y ,f s d i r e c t o r y 类似于 j a v a 的f 订e ,负责把数据以文件形式存储在磁盘上,而r a m d i r e c t o r y 是把l u c e n e 的 索引数据放到内存中,显然这两者的区别就足r a m d i r e c t o r y 会使得检索索引会很快, 但不得不考虑的一个闪素就是闪为内存有限,不可能将大量的索引存储在内存中,而 f s d i r e c t o r y 这时就会很容易做到,但检索时磁盘的反复读写又会造成查找索引的速度 很慢。因此往往要权衡效率和索引的大小,从而选择用哪一种数据结构来存储索引。 2 5l u c e n e 的优点 l u c e n e 作为一个全文检索引擎,其具有如下突出的优点 1 索引文件格式的平台独立性。l u c e n e 定义了一套以八位字节为基础的索引文 件格式,这样就使得索引文件能在不同的系统和不同的平台上也同样能使用。 2 在建立索引方面,基于传统全文检索中的倒排索的方法上,实现了分块索引, 同时能够把新的文件建立成小文件索引,进而提升全文索引的速度。另一方面通过与 原有索引的合并操作,达到压缩存储和优化的目的。 3 由于l u c e n e 是用j a v a 这种面向对象的语言编写的,因此使得进一步学习和扩 展功能提供了极大的便利。 4 良好的接口设计原理,l u c e n e 设计的文本分析接口是一个独立于语言和文本 格式的接口,用户只通过实现该文本分析的接口,从而扩展新的语言和文件格式,索 引器通过接受t o k e n 流完成索引文件的创立。 5 l u c e n e 己经实现了一套强大的查淘引擎,用户只需自己编写一定的代码就可 实现l u c e n e 强大的查询功能。l u c e n e 的查询实现中默认实现了布尔操作、模糊查询、 分组查询等等。 面对已经存在的商业全文检索引擎,l u c e n e 也具有相当的优势n 们 1 i o 首先,它的 开发源代码发行方式( 遵守a p a c h es o f t w a r el i c e n s e ) ,因此程序员一方面充分的利 用l u c e n e 已经实现的强大功能,另一方面可以全面的学习到全文检索引擎制作技术和 面向对象编程的实现过程,从而可以根据自身的实际情况,编写出更优秀的更适用于 当前应用的全文检索引擎。其次,l u c e n e 继承了开放源代码架构优良的作风,采用了 合理的并且具有扩展能力很强的面向对象的设计思想,这样可以在l u c e n e 的基础上修 改以及扩充各种功能,例如对中文分词算法的改进,增加从解析一般的文本解析到 h t m l 、p d f 等等其他多种文本格式的处理,只需要实现l u c e n e 提供的接口或者重新它 的方法就可以,而且由于l u c e n e 在设计上的面向对象的抽象化,也使得做到扩展的功 能、跨平台容易和便捷。最后,通过a p a c h e 软件基金组织的平台,程序员可以把l u c e n e 项目转移到a p a c h e 软件基金会,程序员可以方便的和开发者、其它程序员探讨、交流, 促成资源的共享和系统的性能和功能的扩充。另一方面,虽然使用j a v a 语言编写,但 是我们可以利用开源代码的思想和优秀的框架设计思想,程序员也可以用各种语言来 实现相似的全文检索系统( 例如c 、c + + ) ,从而达到了l u c e n e 在各种语言环境下和各 种平台下真正的独立运行,从而使得l u c e n e 更加的丰富和健壮。 1 1 2 6l u c e n e 倒排索引技术 倒排索引,也常被称为反向索引,是种索引方法,被用来存储在全文搜索下某 个单词在一个文档或者一组文档中的存储位置的映射。它是文档检索系统中最常用的 数据结构。有两种不同的反向索引形式:( 1 ) 一条记录的水平反向索引( 或者反向档 案索引) 包含每个引用单词的文档的列表。( 2 ) 一个单词的水平反向索引( 或者完全 反向索引) 又包含每个单词在一个文档中的位置。 以英文为例,下面是要被索引的文章: t o = “t o ml i v e si nw u h a n ,il i v ei nw u h a nt o o t 1 = “h eo n c el i v e di nb e i j i n g 由于l u c e n e 是基于关键词索引和查询的,因此要得到被索引文章中的关键词,通 常我们需要如下处理措施: ( 1 ) 对于文章我们首先要把它分割成每一个句子,然后找出每一个句子中的所有 单词,即分词。英文单词由于用空格分隔,因此词与词之间很容易就可以分割。中文 单词间是连在一起的需要特殊的分词处理。 ( 2 ) 去掉句子中无意义的词,像文档中的“a t , “b u t ”“i n 等词,还有中 文中的“等等、“了 等字一般也没有实质的含义,这些没有实质含义的词以及文 章中的标点符号都可以去掉。 ( 3 ) 统一转换大小写,也就是说用户通常希望查“m y 时能把含“m y 的文章也 能检索出来,所以需要把所有的单词统一大小写,对于中文也就没有区分了。 ( 4 ) 转换为原型,也就是说用户通常希望查“h a v e 时能把含“h a s 的文章也能 检索出来,所以需要把所有的单词都转换成原型的 我们就能得到下面的反向文件索引文件表,见表2 - 2 所示: 表2 - 2 索引文件表 关键词文章号 w u h a nl h e2 l 1 1 i v e 1 ,2 s h a n g h a i 2 t o m 1 通常汉久道天键i 司在哪些义章t ,出现还不够,我们还需眨知道关键词在文章中f l j 现次 数和u 现的位置等信息,通常我们还需要记录两种位黄信息:a ) 字符在文章中出现的 位置,即记录该词是文章中第几个字符( 优点是关键词亮显时定位快) ;b ) 关键词在 文章中出现的位置,即记录该词是文章中第几个关键词( 优点是节约索引空间、词组 查询快) 。加上“出现频率 和“出现位置 信息后,我们的索引结构变成如下形式, 见表2 3 : 表2 - 3 索引文件表 关键词文章号 出现频率 出现位置 w u h a n 1 2 3 ,6 h e 2 1 1 1 1 1 3 4 l i v e 1 2 ,2 1 2 ,5 ,2 s h a n g h a i2 1 3 t o m 1 1 l 实现时l u c e n e 将上面三列分别作为词典文件( 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 ) 保存。其中词典文件不仅保存有每个关键词, 还保留了指向频率文件和位置文件的指针,这样通过指向文件的指针就h 以快速、准 确地找到该关键字的频率信息和位置信息。 l u c e n e 中使用了f i e l d 的类,用于存储关键词所在位置( 如:标题中,文章中, u r l 中) ,在l u c e n e 中f i e l d 相当于数据库中表中的字段,而每个关键词信息就相当 于表中的一条记录,所有每个关键词都有多个f i e l d 的信息,为了减小索引文件的大 小,l u c e n e 对索引的存储还采用了压缩技术。首先,对词典文件中的关键词进行了压 缩,关键词压缩为 ,例如:当前词为“中华人民共和国”,上一个 词为“中华人民”,那么“中华人民共和国 压缩为 。其次大量用到的是 对数字的压缩,数字只保存与上一个值的差值,这样可以减小数字的长度,进而减少 保存该数字需要的字节数。例如当前文章号是1 5 3 6 8 ,不压缩要用3 个字节保存,上一 文章号是1 5 3 8 2 ,压缩后保存6 ,只用一个字节。 2 7 搜索引擎的重要技术指标 在传统的信息检索中,查全率( r e c a l l ) 和查准
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 31270.12-2025化学农药环境安全评价试验准则第12部分:鱼类急性毒性试验
- GB/T 46227-2025半导体单晶材料透过率测试方法
- 农业汇报课件
- 杂志刊登广告合同常用版样板5篇
- 婚前协议模板8篇
- 内部换岗安全培训记录课件
- 内部安全防范培训会课件
- 银行金属营销方案设计(3篇)
- 初中安全培训课件
- 化学实验学生安全培训课件
- 以桂为墨:高中桂花文化校本课程的开发与实践探索
- 2025年计算机二级JAVA考试中的真题练习试题及答案
- 数字政府效能评估体系-洞察阐释
- 2025年电力机车钳工(高级)职业技能鉴定理论考试题库(含答案)
- 智联招聘银行试题及答案
- 安置点管理制度
- 麻醉科职责及管理制度
- 教科版五年级上册科学期中测试卷附答案(夺分金卷)
- 药房管理规章制度目录
- 中职第1课 社会主义在中国的确立和探索试题
- 香港 信托合同范本
评论
0/150
提交评论