基于Lucene的站内新闻搜索引擎的设计与实现.doc
《基于Lucene的站内新闻搜索引擎的设计与实现.doc》由会员分享,可在线阅读,更多相关《基于Lucene的站内新闻搜索引擎的设计与实现.doc(24页珍藏版)》请在沃文网上搜索。
1、基于Lucene的站内新闻搜索引擎的设计与实现摘要Lucene是一个开源的用于制作搜索引擎的框架。目前第二代搜索引擎的设计思路为利用网络爬虫建立数据源,结合分词技术把数据源建成索引,利用索引从海量的数据源中得到搜索结果,对搜索的结果进行筛选和排序, 把最终的结果展示给用户。目前版本的Lucene包括基于JavaCC的标准分词类,建立索引相关类,搜索索引相关类,文档排序和相关性计算相关类等。Lucene良好的架构使得我们可以定义自己的分词类,而Lucene丰富的功能也使得我们能够根据具体的需求,建立自己所需的索引,实现多种多样的搜索方式,进行结果的筛选和排序。本文介绍了搜索引擎的相关知识,分析了
2、Lucene源码,并对搜索引擎的未来进行了展望。本文详细介绍了自己编写的一款在上开发的基于Lucene的新闻搜索引擎,并且通过对实际项目的介绍,阐明了Lucene实现的关键和优缺点,同时还提供了一些与Lucene无关的环节的实现思路。最后对实际项目进行了测试,并分析了测试结果。关键词:Lucene,分词,索引,搜索,排序,相关性,优缺点,搜索引擎,新闻DESIGN ANF IMPLEMENTATION OF NEWS SEARCH ENGINE BASE ON LUCENEABSTRACTLucene is an open source search engine framework for
3、developing. The second generation of search engine design idea is as follows. First, use web crawler to set up a data source. Second, segment and index the data source. Third, get the search result from the index. Fourth, sort and filter the search result. At last, feed back to user. The current Luc
4、ene version contains segment class, index class, search class, sort class and so on. Good framework makes us easy to add our own segment class. The detail implement make us easy to index, search and sort base on the requirement. This article introduces to knowledge of search engine, analysis the sou
5、rce of Lucene and outlook the future of search engine. This article introduces a news search engine base on Lucene on the platform detailed. Through the actual project, I elaborate the key for implement, discuss the advantages and disadvantages for using Lucene, and provide some design idea for impl
6、ement the search engine. At last, I test the actual project, and analysis the result.Key words: Lucene, segment, index, search, sort, correlation, advantage, disadvantage, search engine, news目 录第一章绪论11.1引言11.2Lucene简介1第二章索引的建立32.1概述32.2相关的技术综述32.2.1倒排索引32.3中文分词42.3.1按字索引42.3.2中科院分词42.3.3庖丁解牛42.3.4盘古
7、分词42.3.5Lucene标准分词42.4Lucene索引的建立42.4.1Lucene索引相关类介绍42.4.2Lucene索引结构52.4.3Lucene索引过程52.4.4Lucene索引的合并与优化52.4.5Lucene索引管理5第三章搜索63.1概述63.2Lucene的搜索63.2.1Lucene搜索相关类介绍63.2.2Lucene搜索过程63.2.3Lucene高级搜索63.2.4Lucene搜索系统的分析7第四章结果的筛选和排序84.1概述84.2Lucene筛选84.3Lucene排序84.3.1排序相关技术介绍84.3.2Lucene排序相关类介绍84.3.3Luce
8、ne排序过程84.3.4Lucene排序方式94.3.5Lucene相关性排序94.3.6Lucene排序系统的分析9第五章搜索引擎的未来115.1概述11第六章实现126.1概述126.2索引的创建126.2.1数据源的处理126.2.2索引建立的整体思路126.2.3索引方式的选择136.2.4索引的建立与优化136.3索引的管理136.3.1历史数据索引生成器136.3.2历史数据索引生成辅助工具136.3.3索引管理工具136.3.4索引自动更新服务136.4搜索的实现146.4.1概述146.4.2布尔逻辑的实现146.4.3时间的搜索146.5排序的实现146.5.1按照索引创建的
9、时间排序146.5.2按照相关性排序146.6缓存系统146.7翻页的实现146.8日志维护系统14第七章测试167.1概述167.2索引创建测试167.3索引管理测试167.4搜索速度测试167.5搜索准确度测试16第八章结论17参考文献18致谢19第一章 绪论1.1 引言看完一部电影,意犹未尽,想了解一下电影花絮;买好房子需要装修,但隔行如隔山,在此之前什么都不懂;电脑出了问题,进程中出现了一个怪怪的东西,不知该如何解决。没关系,只要在谷歌,百度上搜索,就算是拔苗助长,却也能解决很多问题。互联网的飞速发展,为我们开创了一个新时代。而要在这浩瀚的互联网世界中寻找自己想要的东西,那就离不开搜索
10、。搜索是为网络而生的。现代意义上的搜索引擎的祖先,是1990午内蒙特利尔入学学生A1an Emtage发明的,名字叫Archie。当时大量的文件散播在各个FTP主机中,人们得到一个资源往往要花费很多时间。因此Alan Emtage发明了一个按文件名查找文件的系统:Archie。而这个系统的工作原理已经和现代的搜索引擎相接近了。真正把搜索引擎引向互联网的是一个叫“机器人”的程序。它不间断高速执行则某项任务,就好像一个“机器人”不断在“互联网”上穿梭,这便是现在意义上的“spider”。世界上的第一个网络爬虫是Matthew Gray开发的World wide web wander。1994年,斯
11、坦福大学的两位博士生杨致远和David Filo共同创办了Yahoo,从此第一代搜索引擎诞生。Yahoo是以网站分类目录为基础的搜索引擎。那时候互联网的数据量还不算太大,Yahoo的编辑们每天把各种各样的网站添加到自己的分类目录中,而网站站长也主动的把自己的网站的更新信息发布给Yahoo。这样Yahoo就把大量的互联网信息整合到自己的搜索引擎中。很长一段时间内,以分类目录为核心思想的搜索引擎占据了大量的市场份额,称为第一代搜索引擎。1997年,Larry Page正式注册了域名,1998年 Larry Page和Sergey Brin以论文的形式介绍了Google,从此互联网搜索进入Googl
12、e时代。Google的成立标志着第二代搜索引擎的诞生。这是一种以网络爬虫,PageRank为标志的搜索引擎。网络爬虫使得互联网上数以亿记的资源联系在一起。PageRank算法到现在的沙盒,有效链接分数综合算法,使得人们可以通过搜索引擎很方便的搜索到自己想要的资源。先如今,搜索引擎蓬勃发展,网络数据量与日俱增,Soso,Bing,Sogou,Iask,Baidu等搜索引擎的日益发展壮大。他们都号称是第三代搜索引擎,虽然严格来说他们和第二代搜索引擎并无区别,但是却各有特点。现在我们正在迎接互联网的新时代,也在迎接搜索引擎的新时代。1.2 Lucene简介最初Lucene是Apache软件基金会Ja
13、karta项目组的子项目,是一个完全开放源码的全文检索工具包。Lucene的原作者是Doug Cutting,他是一位资深全文检索专家,V-Twin搜索引擎的主要开发者。2000年3月Doug Cutting把Lucene转移到SourceForge上,2001年10月献给Apache基金会。Lucene的取名来自Doug Cutting的妻子的名字。Lucene在最初阶段是使用java开发的。然后逐渐被翻译成了多种语言,如C+、C#、Perl等。同时Lucene的各种应用也开始发展起来,如Nutch(一个WebCrawler工具)、Hadoop(一个基于Lucene的分布式计算平台)。它们的
14、出现为Lucene带来了新鲜而且强大的动力。目前Lucene已经发展到了3.0版本。但是由于新版本刚刚发布,稳定性还不是很好,本文还是按照成熟的lucene2.4版本进行介绍。第二章 索引的建立2.1 概述我们首先已经事先建立好了数据源,那么对于建立搜索引擎而言,第二步就是建立索引。索引的目的在于建立一个用户目的信息,与数据源中一个单一数据的对应。具体到文章来说就是需要找到用户所搜索的词与文章的关联。索引的建立主要涉及一下几个问题,什么样的数据要建立索引?以怎样的方式建立索引?什么样的数据需要建立索引呢?这就要分析用户需求了。现阶段用户往往输入一段文字,然后希望找到与这段文字相关的信息。这段文
15、字可以拆分成一个个的字,也可以拆分成一个个的词。无论字词,现在最后这都是我们获取的用户信息,我们要通过这个用户信息查找到相应的数据,那么字词便是需要建立索引的东西。与用户有关的字词,往往出现在文章的标题和文章的正文中,这便是我们需要建立索引的域。把这里边的内容拆成一个个的字词,这些字词就是我们要进行索引的数据。而且用户需要搜索时间,我们就把时间整体索引,用户需要搜索什么,我们就把什么做索引。怎样的方式去建立索引,决定了通过你的索引查找到相关文章的效率,索引的方式很多,我据一种简单的方式,而后结合Lucene在详细的说明建立索引的方式。一种最简单的建立索引的方式就是把字词和一篇文章中出现过这个字
16、词的文档的编号存在一起。这样,当搜索到这个字词的时候,便能得到相应的文档编号,通过文档编号,便可以获取文档的全部信息。索引的建立是开发搜索引擎的关键一步,他关系着你的搜索引擎的搜索效率。2.2 相关的技术综述2.2.1 倒排索引倒排索引是也常被称为反向索引、置入档案或反向档案,是一种索引方法,被用来存储在全文搜索下某个单词在一个文档或者一组文档中的存储位置的映射。它是文档检索系统中最常用的数据结构。举一个例子:文本T0“我爱中华人民共和国”文本T1“我爱中国”文本T2“中华人民共和国很伟大”那么反向文件索引为:“我”:0,1“爱”:0,1“中华人民共和国”:0,2“中国”:1“很”:2“伟大”
17、:2这样搜索“我”“中国”的结果就是0,11=12.3 中文分词中文分词是索引建立的关键。因为中文博大精深,不像英语以空格完美分隔词。同样的一句话在不同的语境下意思不同,同样连在一起两个字,在某些情况下它们是一个词,而有些情况下它们就是分别的字或者另一个词的组成部分。例如我马上到,我从马上下来。两个马上很难区分。而且像“高高兴兴”这样的叠词,“去哪儿”这个儿化音词,“吃了顿饭”这种分离词都对使得分词变得极其困难。现在变简单的介绍几种分词方式。2.3.1 按字索引按字分词可以解决所有的问题,使得搜索变的十分准确,因为字是汉字的最小单位,我们只要知道输入的是什么字,字与字之间的位置关系便可以确定整
18、个搜索内容。但是按字分词往往使得索引过大,并且用户往往都是直接输入连在一起的汉字,这样便使得,按字拆分的方法不能很好的猜测用户的意思。2.3.2 中科院分词中科院分词系统是目前使用很广泛的系统。其最大的特点便是保留了大量的分词组合结果,对于每一个结果,通过公司进行计算其相关性,从而从多个分词结果中选出最合适的一个。另一个特点便是他的人名,地名识别系统。虽然在其开源版本上不尽如人意,但是在其共享版的测试中效果还是非常好的。他的缺点是分词数据并不是很快,而且开源版和共享版都有些问题。优点是分词准确。2.3.3 庖丁解牛这个算法只有Java版本,其中的分词算法效率很高,和JavaCC中的词法分析算法
19、有一些类似。这个分词的缺点是有很多分词不准,优点是分词速度很快。2.3.4 盘古分词 这个分词的思想便是匹配,但是其中对于多字的词,这个分词软件设置了很高的优先级,使得分词结果与我们实际想要的结果更加接近。这个分词的优点是完全开源,结构清晰,方便在里边修改源代码,调整权重,并且有一套很好的词典管理工具。缺点就是其内置的词典太过混乱,需要人工修改,并且分词准确性不如中科院分词。2.3.5 Lucene标准分词 这个分词是按照JavaCC实现的。最后的结果是英文完美分词,中文按字拆分。总的来说对英文应用来说是完美的分词。但是对中文分词来说,效率上不够。2.4 Lucene索引的建立2.4.1 Lu
20、cene索引相关类介绍(1) Document Lucene中的逻辑文件,每一个或多个物理文件与一个逻辑文件相对应。Document逻辑文件便是Lucene中数据源。(2) Field代表Document的属性。一个Document由多个Field组成。Field有是否索引,是否储存,是否分词之分。(3) Term词条,每个Field中包含一个或多个词条。(4) IndexWriter写索引相关类 (5) IndexReader读索引相关类2.4.2 Lucene索引结构(1) Segment通常,一个Segment代表Lucene的一个完整索引段,一个索引中会包含多个Segment。(2)
21、.fnm包含了Document中所有Field的名称。(3) .fdt用于储存具有Store.YES属性的Field数据。(4) .fdx用于储存Document在.fdt中的位置。(5) .tis用于储存分词后的词条。(6) .tii标明了每个.tis文件中词条的位置。(7) Deletable储存了要删除的文档。(8) .cfs复合索引格式。2.4.3 Lucene索引过程(1) 初始化IndexWriter。初始化分词器,设置好文件路径。(2) 生成Document。把每个Field添加到Document,区分哪些是要保存的,哪些是要分词的,哪些是要索引的。(3) 写索引。把Docume
22、nt信息写人缓存,然后生成Segment、.fnm、.fdt、.fdx、.tis、.tii、Deletable文件,最后合并为Segment、.cfs、Deletable三个索引文件。(4) 索引的合并与优化。把多个.cfs文件合并为一个,并删除无用信息。2.4.4 Lucene索引的合并与优化索引的合并通过mergeFactor、maxMergeDocs、minMergeDocs因素控制,在批量建立索引时mergeFactor去大值,在少量添加索引时mergeFactor去小值。索引的优化通过IndexWriter的Optimize方法实现。把多个Segment和Deletable进行了合并
23、。2.4.5 Lucene索引管理 Lucene的索引管理通过IndexReader来实现,通过这个类,我们可以通过ID找到相应的文档,通过ID删除文档,对删除的文档进行恢复等操作。索引的建立还是通过IndexWriter。索引的同步则依靠write.lock和commit.lock来实现。通过IndexReader和IndexWriter这两个类就可以很好的管理索引。在具体的项目中会介绍如何有效的管理索引。第三章 搜索3.1 概述搜索是建立一个搜索引擎的第三步,也是根据需求确定内核设计最烦琐的一步。我们在建立搜索是不仅要考虑搜索的数量和范围,更要定义相关的过滤器来过滤搜索结果,最后针对各种需
- 1.请仔细阅读文档,确保文档完整性,对于不预览、不比对内容而直接下载带来的问题本站不予受理。
- 2.下载的文档,不会出现我们的网址水印。
- 3、该文档所得收入(下载+内容+预览)归上传者、原创作者;如果您是本文档原作者,请点此认领!既往收益都归您。
下载文档到电脑,查找使用更方便
20 积分
下载 | 加入VIP,下载更划算! |
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 Lucene 站内 新闻 搜索引擎 设计 实现