版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 毕业论文 题目: 基于Lucene的桌面搜索引擎 学院: 管理科学与工程学院 专业: 信息管理与信息系统 摘 要随着信息资源的高速膨胀和计算机硬件的高速发展,个人PC存储容量变的越来越大。要想在越来越大硬盘里,从海量的资料中查找自己感兴趣的文档信息也随之变得越来越困难。而往往操作系统中自带的搜索器又不能完全满足我们的需求,因此我们迫切需要一款全新的桌面搜索引擎来帮助我们。本文首先简单介绍了基于因特网的搜索引擎的系统结构和原理,然后着重介绍了桌面搜索引擎和全文检索的相关知识,对基于Lucene的全文检索引擎的架构原理方面进行详细的说明,同时对Lucene的索引机制、系统结构,以及中文分词都进行
2、了仔细分析。然后介绍了本文实现的一个基于Lucene的桌面搜索引擎。本桌面搜索引擎一个轻量级的全文检索软件,能够帮助用户方便地在越来越大硬盘里,从海量的资料中查找自己感兴趣的文档。从指定的文件路径中按照目录层次进行解析、搜索,并把搜索到的每条信息进行索引后加入索引文件,然后通过Web服务器接受客户端请求后从索引文件中搜索出所匹配的信息。关键词:桌面搜索引擎、倒排索引、lucene、B/S、文本文件AbstractThis article fist introduces the system structure and principle of search engine based on th
3、e internet in detail, then gives a minute explanation form Based on the full-text search engine Lucene framework and principle. In order to understand the technology more deeply, I have programmed a news search engine by myself.The news search engine is explained and searched according to document-l
4、evel directory, then indexs every searched information and adds it to the index file. Then after receiving the customers' requests from the web server, it soon searchs the right information form the index engine.In the chapter of introducing search engine, it is not only elaborate the core techn
5、ology, but also combine with the modern code,pictures included, easy to understand.Key Words:search engine、lucene、B/S、file目录绪论31. 桌面搜索引擎与全文检索51.1 搜索引擎的概念及发展51.2 桌面搜索引擎简介61.2.1 Windows自带搜索功能的不足61.2.2 我们需要一款桌面搜索引擎71.2.3 桌面搜索引擎现状71.3 全文检索81.3.1 什么是全文检索与全文检索系统81.3.2 全文检索原理91.3.3 全文检索的倒排索引原理122. 开放源代码的全文
6、检索引擎架构Lucene132.1 Lucene简介132.1.1 什么是Lucene132.1.2 Lucene的应用、特点及优势142.2 Lucene系统结构分析152.3 深入Lucene 索引机制172.4 Lucene文档分析与中文分词192.4.1 Lucene分析器原理192.4.2 中文分词212.5 Lucene的索引效率252.6 从Lucene学到更多263. 基于Lucene的桌面搜索引擎273.1 功能简介273.2 桌面搜索引擎索引器设计283.2.1 索引器简介283.2.2 界面设计293.2.2 功能设计303.3 桌面搜索引擎索引器实现313.3.1 解析
7、器实现313.3.2 中文分词考虑343.3.3 索引器实现353.4 搜索器实现383.4.1 搜索器简介383.4.2 搜索器界面383.4.3 搜索器实现383.4.4 实例演示393.5 数据持久化403.5.1 持久化简介403.5.2 具体实现406. 参考资料41绪 论我们处在一个信息资源高速膨胀的时代,信息爆炸已成为一个全球性的现象。然而,面对极度膨胀的信息量,面对“混沌信息空间”和“数据过剩”的巨大压力,人们对于信息的苦苦追求和期待忽然间变得踟蹰了。每天在我们所生活在的这个世界都会出现大量的信息,如果能够对这些信息做出一些筛选,既可以为我们的广大用户提供一些好的知识与信息,也
8、为他们为了寻找这些知识与信息节省时间与成本.据统计,新产生的信息中有记录在硬盘等磁存储介质上,其次分别是胶片、纸张和光存储介质。也正因为如此各种搜索引擎也应运而生。搜索引擎的意义网络的出现把世界连接成了一个地球村,信息的传输再也不受到时间和空间的限制,但是处在这样一个信息爆炸的网络时代,仅仅是每天诞生的新知识,就可能让一个人一生也学不完。那么在这样一个“信息迷宫”里,如何才能把握自己需要的信息将会是最大的问题。虽然各个网站上的信息数不尽数,但是在没有搜索引擎的时代,用户希望寻找某方面的信息,就必须通过各种途径或者网站之间的超链接进行寻找。可以说,脱离了搜索引擎的网站都是一个一个的信息孤岛,用户
9、必将面临巨大的搜寻成本,必须付出大量的时间和精力。搜索引擎的出现改变了这一切,它通过程序的自动搜寻并建立索引,将这些信息孤岛联系起来,形成了一张网,并且运用分布式计算的巨大力量,能够让用户从海量数据中摒除垃圾信息,获取想要的知识。搜索引擎不仅仅是节省了用户的时间,通过挖掉搜寻成本这座墙,它让许许多多的不可能成为可能人们可以利用搜索引擎,获得更加全面、详尽的信息,参考性和点拨性都很强。因此,相当一部分职场人士表示,搜索引擎当之无愧是他们工作中非常完美的助手。如今,越来越多的白领已把获取信息的途径,从直接上门户网站、社区转向了搜索引擎工具。使用字典等工具书,上图书馆查阅资料的历史,逐渐从白领们的生
10、活中淡出了。本地搜索引擎的意义任何有用信息获取后,最终都要存储在硬盘中。随着信息量的不断增加,硬盘的容量也成指数增长,我们从硬盘中查找信息的难度也变得越开越困难。要想在越来越大硬盘里,从海量的资料中查找自己感兴趣的文档信息绝非一件易事,而操作系统中自带的搜索器又不能完全满足我们的需求,它们存在的共同问题是速度慢且不能由用户选择使用偏好。于是人们也开始考虑针对本地文件搜索的全文检索软件,能够帮助用户方便地在越来越大的硬盘里,从海量的资料中查找自己感兴趣的文档。这样的一款全文检索软件就是我们熟悉的桌面搜索引擎。对于人们的生活、工作、休闲等方方面面,桌面搜索引擎的服务性也更加凸显。正因为桌面搜索的便
11、捷性,给生活节奏日益加快的人们提供了很大的便利。在繁忙的工作中,你不需要花费太大精力来维护盘中的无数文件信息,当你查找想要的信息时,只需要在电脑上点几下就可以了。桌面搜索引擎的存在就好像图书馆中的书目检索系统一样,如果没有书目检索系统,图书管理就会是一团混乱,没有人能找到自己想要看的书,即使你的藏书再多也不会吸引来读者的。硬盘文件系统也是一样的道理,文件系统中包含着大大小小无数的文件,然而,如果没有桌面搜索引擎这件利器,人们纵然知道自己想要找的东西就在那里,但是也不一定能及时有效的找到自己想要的。桌面搜索引擎的现状桌面搜索是2004年搜索引擎领域的热门词汇之一,已经成为主要搜索引擎新的竞争领域
12、。桌面搜索的特点在于将搜索方位延伸到自己电脑硬盘中所存储的各种文档,例如雅虎的桌面搜索引擎所支持文档格式包括的Email、Word、Excel、PowerPoint、PDF等等多达200多种格式的文本、音乐、图片和网页。该软件允许用户根据自己的风格控制搜索习惯,并且在用户的隐私方面也有独到的保护措施。2004年10月份,主流搜索引擎Google率先推出桌面搜索工具,紧接着MSN也推出了同类产品,雅虎则在2005年1月11日发布了自己的桌面搜索工具。其实,早在2004年3月份Lycos/Hotbot发布了一款桌面搜索工具-HotBot Desktop,但由于其影响力有限,直到Google桌面搜索
13、推出之后才受到业内的广泛重视。国内的中搜则于2004年2月发布了全球第一款搜索桌面软件网络猪,并于2004年12月下旬初发布了3.0版本。以后,百度、微软也发布了桌面搜索引擎。 百度硬盘搜索是一款搜索硬盘资料的软件,全面支持中文分词,能够快速、准确地帮助用户从个人电脑中查找到想要的信息,包括文件、电子邮件以及网页浏览历史等。更为重要的是,百度硬盘搜索为用户提供了密码保护功能。雅虎桌面搜索精灵可以在任何应用程序中选中文字,然后将鼠标移动到桌面搜索精灵上进行搜索,或者直接按下桌面搜索精灵的热键进行搜索;也不用事先打开任何浏览器,不用将选中的文字复制出来再粘贴过去;速度快,体积小也是其最大的特点。G
14、oogle桌面搜索引擎可以在你的桌面查看个性化新闻、图片及其他内容,在你所有的计算机范围内搜索文件,直接通过补充工具栏与你的朋友共享信息,查找你的电子邮件、文件、照片、Web 历史记录、Email 及其他内容。本文简介本文首先简单介绍了基于因特网的搜索引擎,然后着重介绍了桌面搜索引擎和全文检索的相关知识,对基于Lucene的全文检索引擎的架构原理方面进行详细的说明,同时对Lucene的索引机制、系统结构,以及中文分词都进行了仔细分析。然后介绍了本文实现的一个基于Lucene的桌面搜索引擎。本桌面搜索引擎一个轻量级的全文检索软件,能够帮助用户方便地在越来越大硬盘里,从海量的资料中查找自己感兴趣的
15、文档。从指定的文件路径中按照目录层次进行解析、搜索,并把搜索到的每条信息进行索引后加入索引文件,然后通过Web服务器接受客户端请求后从索引文件中搜索出所匹配的信息。1. 桌面搜索引擎与全文检索1.1 搜索引擎的概念及发展搜索引擎的概念对于网民来说,几乎每天都要用到它,也正是它,缔造了今天的Google、百度、雅虎,说道这里你可能已经知道它指的就是搜索引擎。习惯上,人们认为网络搜索引擎是进行查询网站或网页信息的站点或工具,这是一种狭义的定义。广义地说,搜索引擎是指在互联网上或通过互联网能够响应用户提交的搜索请求,返回相应查询结果的信息技术和系统,这里所说的信息可以是任意的信息,如网站信息、商品信
16、息等等。搜索引擎的发展搜索引擎是能够从互联网上收集信息,并为用户提供查询服务的软件系统。搜索引擎对原始文档进行着一系列的整理和处理。用户的查询结果是搜索引擎按照某种规则计算获得的。搜索引擎为用户提供了资源查找和导航的有效手段。搜索引擎的雏形阶段:最早是在1990年,出现了互联网信息检索工具Archie系统,这个系统搜集的信息资源不是网页,但原理和现在的搜索引擎原理一致,具备信息资源自动搜集、信息处理和索引、提供资源检索服务功能。Archie是公认的现代意义上的搜索引擎的祖先。第一代搜索引擎:互联网上的第一代搜索引擎创造了一段全新的互联网历史。这个阶段的搜索引擎以Alavista、YAHOO、和
17、Infoseek为代表,主要靠人工目录分类。由于人工分类很难处理海量信息,搜索结果的好坏往往用反馈结果的数量来衡量。所后的几年内相继出现了Lycos、AltaVista、等系统。这些系统各有特点,成为当时重要的搜索导航工具。有的还提供了网络蜘蛛功能,真正实现了索引内容的动态更新,收录的数量也快速增加。第二代搜索引擎:互联网的第二代搜索引擎也伴随着互联网内容的指数增长而出现。第一代由于技术的限制,很难覆盖互联网的大部分网站。链接分析技术的引入,真正提高了自动搜索引擎的结果质量。第二代搜索引擎以自动抓取和自动排序检索为特征。这个阶段最成功的产品之一就是Google。Google占据大量的用户和市场
18、份额。第三代搜索引擎:互联网上的第三代搜索引擎正在发展形成当中,第三代搜索引擎具有的特征正在探讨当中。个性化、分类划、智能化是比较认同的特征。如果我们相信互联网会有百年,如果我们相信互联网会长存,我们就应该看见只有十几年历史的搜索引擎就像个幼稚孩子,一定会有巨大的令人震惊的改变。随着互联网规模的急剧膨胀,一家搜索引擎光靠自己单打独斗已无法适应目前的市场状况,因此现在搜索引擎之间开始出现了分工协作,并有了专业的搜索引擎技术和搜索数据库服务提供商。从这个意义上说,它们是搜索引擎的搜索引擎。1.2 桌面搜索引擎简介1.2.1 Windows自带搜索功能的不足使用windows操作系统的朋友们经常会用
19、到windows操作系统自带的搜索功能来查找自己想要的文件,但所有的使用者或多或少都会有这样的困惑,有时候会忘了自己的文件放到哪个文件夹下,因而只能全盘查找,而查找的速度足以让你在等待结果的期间再美美的睡上一觉。下面将介绍一下windows自带搜索的不足首先是搜索速度的问题,由于Windows自带的搜索功能的原理采用的是字符串匹配,所以当你对一个几十G的硬盘进行查找那将是一件耗时的事情。其次你不能建立自己的用户查找偏好, 你的查找总是按照操作系统指定的路径查找,当你忘了自己的文件放在那里时,那将是更可怕的事,你恐怕要进行全盘查找。再次例搜索所支持文档格式不能完全满足用户的需要,如果你想随心所欲
20、的查找你想要的文件格式,恐怕你要另寻出路了。1.2.2 我们需要一款桌面搜索引擎尽管Windows自带的搜索很不方便,但依然有大量的用户存在,原因是桌面搜索是我们经常要做的一件事。为了能够克服Windows自带搜索的不足,我们迫切需要一款全新的桌面搜索引擎。桌面搜索是2004年搜索引擎领域的热门词汇之一,已经成为主要搜索引擎新的竞争领域。2004年10月份,主流搜索引擎Google率先推出桌面搜索工具,紧接着MSN也推出了同类产品,雅虎则在2005年1月11日发布了自己的桌面搜索工具。其实,早在2004年3月份Lycos/Hotbot发布了一款桌面搜索工具-HotBot Desktop,但由于
21、其影响力有限,直到Google桌面搜索推出之后才受到业内的广泛重视。国内的中搜则于2004年2月发布了全球第一款搜索桌面软件网络猪,并于2004年12月下旬初发布了3.0版本桌面搜索的特点在于将搜索方位延伸到自己电脑硬盘中所存储的各种文档,例如雅虎的桌面搜索引擎所支持文档格式包括的Email、Word、Excel、PowerPoint、PDF等等多达200多种格式的文本、音乐、图片和网页。该软件允许用户根据自己的风格控制搜索习惯,并且在用户的隐私方面也有独到的保护措施。尽管目前在技术和应用方面还存在一定的问题,但桌面搜索已经成为一个被普遍看好的热门市场,因为服务商相信桌面搜索比传统的基于浏览器
22、的搜索引擎有助于增加消费者的忠诚度,并为发布个性化广告奠定基础在这方面,可能有点类似于即使信息的广告形式,这也是各种网络服务工具相互影响、相互吸收优点的发展所致。1.2.3 桌面搜索引擎现状Google桌面搜索Google桌面搜索引擎让人第一感觉就是小,仅有出头。简洁的界面与Google的网页搜索一脉相承,体现了“简单即美”的概念。Google 桌面搜索需要运行于浏览器中,你可以通过双击Windows工具栏中的小图标来快速调用它,它的界面中同时提供了“搜索桌面”和“搜索所有网站”两个按钮。特点:它可以在你的桌面查看个性化新闻、图片及其他内容,在你所有的计算机范围内搜索文件,直接通过补充工具栏与
23、你的朋友共享信息,查找你的电子邮件、文件、照片、Web 历史记录、Email 及其他内容。百度硬盘搜索百度硬盘搜索与百度在线搜索的界面非常相似,只是增加了“硬盘”选项,在关键字输入框的下方,可以看到本地资料搜索的类别分别是:所有、邮件、文档、网页、影音、图片、聊天、其他等类。对于邮件,它支持 邮件,文档则支持、等格式。特点:百度硬盘搜索是一款搜索硬盘资料的软件,全面支持中文分词,能够快速、准确地帮助用户从个人电脑中查找到想要的信息,包括文件、电子邮件以及网页浏览历史等。更为重要的是,百度硬盘搜索为用户提供了密码保护功能。雅虎桌面搜索精灵同一样,雅虎桌面搜索精灵也是一款小巧的搜索工具软件。对于搜
24、到的结果,它在窗口右边专门提供了一个预览区,可以迅速显示所选中文件的内容,让你判断该文件是否就是想要找的文件。而且它在预览窗格的上方提供了打开文件、邮件发送、打印、删除等快捷按钮,相当醒目易用。特点:你可以在任何应用程序中选中文字,然后将鼠标移动到桌面搜索精灵上进行搜索,或者直接按下桌面搜索精灵的热键进行搜索;也不用事先打开任何浏览器,不用将选中的文字复制出来再粘贴过去;速度快,体积小也是其最大的特点。1.3 全文检索 1.3.1 什么是全文检索与全文检索系统 全文检索是指计算机索引程序通过扫描文章中的每一个词,对每一个词建立一个索引,指明该词在文章中出现的次数和位置,当用户查询时,
25、检索程序就根据事先建立的索引进行查找,并将查找的结果反馈给用户的检索方式。这个过程类似于通过字典中的检索字表查字的过程。全文检索的方法主要分为按字检索和按词检索两种。按字检索是指对于文章中的每一个字都建立索引,检索时将词分解为字的组合。对于各种不同的语言而言,字有不同的含义,比如英文中字与词实际上是合一的,而中文中字与词有很大分别。按词检索指对文章中的词,即语义单位建立索引,检索时按词检索,并且可以处理同义项等。英文等西方文字由于按照空白切分词,因此实现上与按字处理类似,添加同义处理也很容易。中文等东方文字则需要切分字词,以达到按词索引的目的,关于这方面的问题,是当前全文检索技术尤其是中文全文
26、检索技术中的难点,在此不做详述。全文检索系统是按照全文检索理论建立起来的用于提供全文检索服务的软件系统。一般来说,全文检索需要具备建立索引和提供查询的基本功能,此外现代的全文检索系统还需要具有方便的用户接口、面向WWW1的开发接口、二次应用开发接口等等。功能上,全文检索系统核心具有建立索引、处理查询返回结果集、增加索引、优化索引结构等等功能,外围则由各种不同应用具有的功能组成。结构上,全文检索系统核心具有索引引擎、查询引擎、文本分析引擎、对外接口等等,加上各种外围应用系统等等共同构成了全文检索系统。图1.1展示了上述全文检索系统的结构与功能。在上图中,我们看到:全文检索系统中最为关键的部分是全
27、文检索引擎,各种应用程序都需要建立在这个引擎之上。一个全文检索应用的优异程度,根本上由全文检索引擎来决定。因此提升全文检索引擎的效率即是我们提升全文检索应用的根本。另一个方面,一个优异的全文检索引擎,在做到效率优化的同时,还需要具有开放的体系结构,以方便程序员对整个系统进行优化改造,或者是添加原有系统没有的功能。比如在当今多语言处理的环境下,有时需要给全文检索系统添加处理某种语言或者文本格式的功能,比如在英文系统中添加中文处理功能,在纯文本系统中添加XML2或者HTML3格式的文本处理功能,系统的开放性和扩充性就十分的重要。1.3.2 全文检索原理全文检索是对大数据文本进行索引,在建立的索引中
28、对要查找的单词进行进行搜索,定位哪些文本数据包括要搜索的单词。因此,全文检索的全部工作就是建立索引和在索引中搜索定位,所有的工作都是围绕这两个来进行的。下面就逐个介绍建立全文索引中有两项非常重要,一个是如何对文本进行分词,一是建立索引的数据结构。分词的方法基本上是二元分词法、最大匹配法和统计方法。索引的数据结构基本上采用倒排索引的结构。分词的好坏关系到查询的准确程度和生成的索引的大小。在中文分词发展中,早期经常使用分词方式是二元分词法,该方法的基本原理是将包含中文的句子进行二元分割,不考虑单词含义,只对二元单词进行索引。因此该方法所分出的单词数量较多,从而产生的索引数量巨大,查询中会将无用的数
29、据检索出来,好处是算法简单不会漏掉检索的数据。之后又发展出最大匹配分词方法,该方法又分为正向最大分词和逆向最大分词。其原理和查字典类似,对常用单词生成一个词典,分析句子的过程中最大的匹配字典中的单词,从而将句子拆分为有意义的单词链。最大匹配法中正向分词方法对偏正式词语的分辨容易产生错误,比如“首饰和服装”会将“和服”作为单词分出。达梦数据库采用的是改进的逆向最大分词方法,该分词方法较正向正确率有所提高。最为复杂的是通过统计方式进行分词的方法。该方法采用隐式马尔科夫链,也就是后一个单词出现的概率依靠于前一个单词出现的概率,最后统计所有单词出现的概率的最大为分词的依据。这个方法对新名词和地名的识别
30、要远远高于最大匹配法,准确度随着取样文本的数量的增大而提高。 二元分词方法和统计方法是不依赖于词典的,而最大匹配法分词方法是依赖于词典的,词典的内容决定分词结构的好坏。全文检索的索引被称为倒排索引,之所以成为倒排索引,是因为将每一个单词作为索引项,根据该索引项查找包含该单词的文本。因此,索引都是单词和唯一记录文本的标示是一对多的关系。将索引单词排序,根据排序后的单词定位包含该单词的文本。逆向分词的过程说明步骤1)读取一整条句子到变量str中,转到步骤2 步骤2)从句子的尾端读取1个字到变量word中,转到步骤3步骤3)在字典查找word中保存的单词。如果存在则保存word,转到步骤4,否则转到
31、步骤5)步骤4)如果是字典中最大单词或者超过最大单词数(认定为新词),从句尾去掉该单词,返回步骤2步骤5)读取前一个字到word中,构成新单词,转到步骤3)词库的内存数据结构和词库中单词的匹配算法内存中单词采用层次结构保存假设字典中有如下的单词中国、中华民国、国家、人民、民主在内存中按照如下方式按层排列,其中每一个方块代表一个字,箭头所指向为该单的前一个字单词按照如下方式匹配比如查找单词“中华民国”,首先在第一层中使用二分法找到“国”字,获得“国”下层的数组“中民”,在该层使用二分法查找“民”,获得“民”下层的数组“华”,在该层使用二分法查找“华”,获得“华”下层的数组“中”,最后在该层找到中
32、,至此,但此匹配完毕。索引的格式索引的格式是倒排索引的格式,也就是一个单词对应若干个文本表示。,在达梦数据库中,建立全文索引的对象是rec中的字段,生成倒排索引使用数据库中的b树进行存储。在数据库是对某个字符字段进行全文索引,因此,rec的rowid作为该rec上该field的标示是必须要被记录的。因此倒排索引存储的格式如下。全文索引的查询 全文的索引查询首先将对要查询的单词进行分词,然后在存储倒排索引的b树中将包含这些单词的rowid全部查找出来,并根据这些rowid在存储实际数据的b树中,将包含这些数据的行过滤出来。处理流程按照如下描述:1.3.3 全文检索的倒排索引原理为什么我
33、们要说倒排索引呢? 因为倒排索引是目前搜索引擎公司最对搜索引擎最常用的存储方式,也是搜索引擎的核心内容!在搜索引擎实际的引用之中,有时需要按照关键字的某些值查找记录,所以我们是按照关键字建立索引,这个索引我们就称之为:倒排索引,而带有倒排索引的文件我们又称作:倒排索引文件 也可以叫它为:倒排文件,来实现快速的检索与高速的效率!什么是倒排表呢?倒排文件中的 次关键字索引 我们称做: 倒排表其主要优点是: 在处理复杂的多关键字查询时,可在倒排表中先完成查询的交、并等逻辑运算,得到结果后再对记录进行存取。这样不必对每个记录随机存取,把对记录的查询转换为地址集合的运算,从而提高查找速度!下面就是整个倒
34、排表的建立过程(组图):1.数据表2.索引表3.右项归并后的索引表怎样建立倒排索引呢?关于建立倒排索引其实就象我们写一本小说一样,目录是章节标题对应的页码 对全文搜索来讲,倒排索引就是词对应文档编号!下面我们举个例子: 案例1:普通文档存在形式:PPT(从头到尾)=> keywords1, keywords2, keywords3, keywords4,keywords5案例2:倒排索引翻转后的结果显示: keywords1, keywords2, keywords3, keywords4,keywords5 (直接找关键字 然后在找内容页)=> PPT再简单点讲:我们随便看什么书
35、,我想因该是分2种看法,一种是从头到尾法! 而另一种就 先看目录看那些是我需要看的那么直接就翻到该页面!不然和第一个人一样从头一直看 ,看到你想要看的,那不是前面时间都浪费了?目录就起了个关键作用!2. 开放源代码的全文检索引擎架构Lucene2.1 Lucene简介2.1.1 什么是LuceneLucene是apache软件基金会jakarta项目组的一个子项目,是一个开放源代码的全文检索引擎工具包,即它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎,部分文本分析引擎(英文与德文两种西方语言)。Lucene的目的是为软件开发人员提供一个简单易用的工具包
36、,以方便的在目标系统中实现全文检索的功能,或者是以此为基础建立起完整的全文检索引擎。 Lucene的原作者是Doug Cutting,他是一位资深全文索引/检索专家,曾经是V-Twin搜索引擎的主要开发者,后在Excite担任高级系统架构设计师,目前从事于一些Internet底层架构的研究。早先发布在作者自己的,后来发布在SourceForge,2001年年底成为apache软件基金会jakarta的一个子项目:/lucene/。2.1.2 Lucene的应用、特点及优势作为一个开放源代码项目,Lucene从问世之后,引发了开放源代码社群的巨大反
37、响,程序员们不仅使用它构建具体的全文检索应用,而且将之集成到各种系统软件中去,以及构建Web应用,甚至某些商业软件也采用了Lucene作为其内部全文检索子系统的核心。apache软件基金会的网站使用了Lucene作为全文检索的引擎,IBM的开源软件eclipse9的2.1版本中也采用了Lucene作为帮助子系统的全文索引引擎,相应的IBM的商业软件Web Sphere10中也采用了Lucene。Lucene以其开放源代码的特性、优异的索引结构、良好的系统架构获得了越来越多的应用。 Lucene作为一个全文检索引擎,其具有如下突出的优点:(1)索引文件格式独立于应用平台。Lucene定
38、义了一套以8位字节为基础的索引文件格式,使得兼容系统或者不同平台的应用能够共享建立的索引文件。(2)在传统全文检索引擎的倒排索引的基础上,实现了分块索引,能够针对新的文件建立小文件索引,提升索引速度。然后通过与原有索引的合并,达到优化的目的。(3)优秀的面向对象的系统架构,使得对于Lucene扩展的学习难度降低,方便扩充新 功能。 (4)设计了独立于语言和文件格式的文本分析接口,索引器通过接受Token流完成索引文件的创立,用户扩展新的语言和文件格式,只需要实现文本分析的接口。(5)已经默认实现了一套强大的查询引擎,用户无需自己编写代码即使系统可获得强大的查询能力,Lucene的查询实现中默认
39、实现了布尔操作、模糊查询(Fuzzy Search)、分组查询等等。 面对已经存在的商业全文检索引擎,Lucene也具有相当的优势。首先,它的开发源代码发行方式(遵守Apache Software License12),在此基础上程序员不仅仅可以充分的利用Lucene所提供的强大功能,而且可以深入细致的学习到全文检索引擎制作技术和面相对象编程的实践,进而在此基础上根据应用的实际情况编写出更好的更适合当前应用的全文检索引擎。在这一点上,商业软件的灵活性远远不及Lucene。其次,Lucene秉承了开放源代码一贯的架构优良的优势,设计了一个合理而极具
40、扩充能力的面向对象架构,程序员可以在Lucene的基础上扩充各种功能,比如扩充中文处理能力,从文本扩充到HTML、PDF13等等文本格式的处理,编写这些扩展的功能不仅仅不复杂,而且由于Lucene恰当合理的对系统设备做了程序上的抽象,扩展的功能也能轻易的达到跨平台的能力。最后,转移到apache软件基金会后,借助于apache软件基金会的网络平台,程序员可以方便的和开发者、其它程序员交流,促成资源的共享,甚至直接获得已经编写完备的扩充功能。最后,虽然Lucene使用Java语言写成,但是开放源代码社区的程序员正在不懈的将之使用各种传统语言实现(例如.net framework14),在遵守Lu
41、cene索引文件格式的基础上,使得Lucene能够运行在各种各样的平台上,系统管理员可以根据当前的平台适合的语言来合理的选择。2.2 Lucene系统结构分析Lucene作为一个优秀的全文检索引擎,其系统结构具有强烈的面向对象特征。首先是定义了一个与平台无关的索引文件格式,其次通过抽象将系统的核心组成部分设计为抽象类,具体的平台实现部分设计为抽象类的实现,此外与具体平台相关的部分比如文件存储也封装为类,经过层层的面向对象式的处理,最终达成了一个低耦合高效率,容易二次开发的检索引擎系统。以下将讨论Lucene系统的结构组织,并给出系统结构与源码组织图:
42、0; 从图中我们清楚的看到,Lucene的系统由基础结构封装、索引核心、对外接口三大部分组成。其中直接操作索引文件的索引核心又是系统的重点。Lucene的将所有源码分为了7个模块(在java语言中以包即package来表示),各个模块所属的系统部分也如上图所示。需要说明的是org.apache.lucene.queryPaser是做为org.apache.lucene.search的语法解析器存在,不被系统之外实际调用,因此这里没有当作对外接口看待,而是将之独立出来。 从面象对象的观点来考察,Lucene应用了最基本的一条程序设计准则:引入额外的
43、抽象层以降低耦合性。首先,引入对索引文件的操作org.apache.lucene.store的封装,然后将索引部分的实现建立在(org.apache.lucene.index)其之上,完成对索引核心的抽象。在索引核心的基础上开始设计对外的接口org.apache.lucene.search与org.apache.lucene.analysis。在每一个局部细节上,比如某些常用的数据结构与算法上,Lucene也充分的应用了这一条准则。在高度的面向对象理论的支撑下,使得Lucene的实现容易理解,易于扩展。Lucene在系统结构上的另一个特点表现为其引入了传统的客户端服务器结构以外的的应用结构。L
44、ucene可以作为一个运行库被包含进入应用本身中去,而不是做为一个单独的索引服务器存在。这自然和Lucene开放源代码的特征分不开,但是也体现了Lucene在编写上的本来意图:提供一个全文索引引擎的架构,而不是实现。Lucene的API接口设计的比较通用,输入输出结构都很像数据库的表=>记录=>字段,所以很多传统的应用的文件、数据库等都可以 比较方便的映射到Lucene的存储结构/接口中。总体上看:可以先把Lucene当成一个支持全文索引的数据库系统。比较一下Lucene和数据库:全文检索 like "%keyword%" 由于数据库索引不是为全文索引设计的,因
45、此,使用like "%keyword%"时,数据库索引是不起作用的,在使用like查询时,搜索过程又变成类似于一页页翻书的遍历过程了,所以对于含有模糊查询的数据库 服务来说,LIKE对性能的危害是极大的。如果是需要对多个关键词进行模糊匹配:like"%keyword1%" and like "%keyword2%" .其效率也就可想而知了。通常比较厚的书籍后面常常附关键词索引表(比如:北京:12, 34页,上海:3,77页),它能够帮助读者比较快地找到相关内容的页码。而数据库索引能够大大提高查询的速度原理也是一样,想像一下通过书后面的
46、索 引查找的速度要比一页一页地翻内容高多少倍而索引之所以效率高,另外一个原因是它是排好序的。对于检索系统来说核心是一个排序问题。 所以建立一个高效检索系统的关键是建立一个类似于科技索引一样的反向索引机制,将数据源(比如多篇文章)排序顺序存储的同时,有另外一个排好序的关键词 列表,用于存储关键词=>文章映射关系,利用这样的映射关系索引:关键词=>出现关键词的文章编号,出现次数(甚至包括位置:起始偏移 量,结束偏移量),出现频率,检索过程就是把模糊查询变成多个可以利用索引的精确查询的逻辑组合的过程。从而大大提高了多关键词查询的效率,所以,全文 检索问题归结到最后是一个排序问题。由此可以
47、看出模糊查询相对数据库的精确查询是一个非常不确定的问题,这也是大部分数据库对全文检索支持有限的原因。Lucene最核心的特征是通过特殊的索引结构实现了传统数据库不擅长的全文索引机制,并提供了扩展接口,以方便针对不同应用的定制。2.3 深入Lucene 索引机制Lucene是一个高性能的java全文检索工具包,它使用的是倒排文件索引结构。该结构及相应的生成算法如下:一、设有两篇文章1和2文章1的内容为:Tom lives in Guangzhou,I live in Guangzhou too.文章2的内容为:He once lived in Shanghai.二、由于lucene是基于关键词索
48、引和查询的,首先我们要取得这两篇文章的关键词,通常我们需要如下处理措施1、我们现在有的是文章内容,即一个字符串,我们先要找出字符串中的所有单词,即分词。英文单词由于用空格分隔,比较好处理。中文单词间是连在一起的需要特殊的分词处理。2、文章中的”in”, “once” “too”等词没有什么实际意义,中文中的“的”“是”等字通常也无具体含义,这些不代表概念的词可以过滤掉3.、用户通常希望查“He”时能把含“he”,“HE”的文章也找出来,所以所有单词需要统一大小写。4、 用户通常希望查“live”时能把含“lives”,“lived”的文章也找出来,所以需要把“lives”,“lived”还原成
49、“live”5、文章中的标点符号通常不表示某种概念,也可以过滤掉,在lucene中以上措施由Analyzer类完成,经过上面处理后 文章1的所有关键词为:tom live guangzhou live guangzhou 文章2的所有关键词为:he live shanghai三、 有了关键词后,我们就可以建立倒排索引了。上面的对应关系是:“文章号”对“文章中所有关键词”。倒排索引把这个关系倒过来,变成:“关键词”对“拥有该关键词的所有文章号”。文章1,2经过倒排后变成关键词文章号guangzhou 1he 2i1live 2shanghai 2tom tom 1通常仅知道关键词在哪些文章中出现
50、还不够,我们还需要知道关键词在文章中出现次数和出现的位置,通常有两种位置:a)字符位置,即记录该词是文章中第几个字符(优点是关键词亮显时定位快);b)关键词位置,即记录该词是文章中第几个关键词(优点是节约索引空间、词组(phase)查询快),lucene 中记录的就是这种位置。加上“出现频率”和“出现位置”信息后,我们的索引结构变为:关键词文章号出现位置guangzhou 123,6he 211i114live 12,212,5,2shanghai 213tom 11 1以live 这行为例我们说明一下该结构:live在文章1中出现了2次,文章2中出现了一次,它的出现位置为“2,5,2”这表示
51、什么呢?我们需要结合文章号和出现频率来分析,文章1中出现了2次,那么“2,5”就表示live在文章1中出现的两个位置,文章2中出现了一次,剩下的“2”就表示live是文章2中第 2个关键字。以上就是lucene索引结构中最核心的部分。我们注意到关键字是按字符顺序排列的(lucene没有使用B树结构),因此lucene可以用二元搜索算法快速定位关键词。实现时 lucene将上面三列分别作为词典文件(Term Dictionary)、频率文件(frequencies)、位置文件 (positions)保存。其中词典文件不仅保存有每个关键词,还保留了指向频率文件和位置文件的指针,通过指针可以找到该关
52、键字的频率信息和位置信息。Lucene中使用了field的概念,用于表达信息所在位置(如标题中,文章中,url中),在建索引中,该field信息也记录在词典文件中,每个关键词都有一个field信息(因为每个关键字一定属于一个或多个field)。为了减小索引文件的大小,Lucene对索引还使用了压缩技术。首先,对词典文件中的关键词进行了压缩,关键词压缩为<堉?缀长度,后缀>,例如:当前词为“阿拉伯语”,上一个词为“阿拉伯”,那么“阿拉伯语”压缩为<3,语>。其次大量用到的是对数字的压缩,数字只保存与上一个值的差值(这样可以减小数字的长度,进而减少保存该数字需要的字节数)。
53、例如当前文章号是16389(不压缩要用3个字节保存),上一文章号是16382,压缩后保存7(只用一个字节)。下面我们可以通过对该索引的查询来解释一下为什么要建立索引。假设要查询单词 “live”,lucene先对词典二元查找、找到该词,通过指向频率文件的指针读出所有文章号,然后返回结果。词典通常非常小,因而,整个过程的时间是毫秒级的。2.4 Lucene文档分析与中文分词2.4.1 Lucene分析器原理Lucene分析器全由Analyzer派生而来。Analyzer类构建用于分析文本的TokenStream对象,因此(thus)它表示(represent)用于从文本中分解(extract)出
54、组成索引的terms的一个规则器(policy)。典型的(typical)实现首先创建一个Tokenizer,它将那些从Reader对象中读取字符流(stream of characters)打碎为(break into)原始的Tokens(raw Tokens)。然后一个或更多的TokenFilters可以应用在这个Tokenizer的输出上。警告:你必须在你的子类(subclass)中覆写(override)定义在这个类中的其中一个方法,否则的话Analyzer将会进入一个无限循环(infinite loop)中。 Standar
55、dAnalyzer类是使用一个English的stop words列表来进行tokenize分解出文本中word,使用StandardTokenizer类分解词,再加上StandardFilter以及LowerCaseFilter以及StopFilter这些过滤器进行处理的这样一个Analyzer类的实现。 2.4.2 中文分词什么是中文分词众所周知,英文是以词为单位的,词和词之间是靠空格隔开,而中文是以字为单位,句子中所有的字连起来才能描述一个意思。例如,英文句子I am a student,用中文则为:“我是一个学生”。计算机可以很简单通过空格知道student是一个单词,但是不能很容易明白“学”、“生”两个字合起来才表示一个词。把中文的汉字序列切分成有意义的词,就是中文分词,有些人也称为切词。我是一个学生,分词的结果是:我 是 一个 学生。 中文分词技术现有的分词技术可分为三类:基于字符串匹配的分词 基于理解的分词 基于统计的分词 这篇文章中使用的是基于字符串匹配的分词技
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 吉林艺术学院《西方音乐史与欣赏Ⅱ》2021-2022学年第一学期期末试卷
- 吉林艺术学院《理性造型》2021-2022学年第一学期期末试卷
- 吉林艺术学院《歌曲写作Ⅰ》2021-2022学年第一学期期末试卷
- 吉林师范大学《专业技法基础》2021-2022学年第一学期期末试卷
- 2024年大数据平台运营合同范本
- 吉林艺术学院《建筑设计及动态表现》2021-2022学年第一学期期末试卷
- 2024年大白仓库供货合同范本
- 《供应链管理》教案 第1章 供应链管理概论
- 吉林师范大学《和声Ⅲ》2021-2022学年第一学期期末试卷
- 零售行业发货合同条款详解
- 南通市2024届高三第一次调研测试(一模)生物试卷(含答案)
- 《茶叶销售技巧》课件
- 专项施工方案(模板工程及支撑体系专项施工方案)
- 让阅读成为习惯家长会课件
- 居民自建桩安装告知书回执
- 加气站有限空间管理制度
- 中国心血管病报告2023
- 电力电子技术在新能源领域的应用
- 结婚审批报告表
- 2022江苏交通控股有限公司校园招聘试题及答案解析
- 装配式建筑预制构件吊装专项施工方案
评论
0/150
提交评论