基于Lucene的搜索引擎_第1页
基于Lucene的搜索引擎_第2页
基于Lucene的搜索引擎_第3页
基于Lucene的搜索引擎_第4页
基于Lucene的搜索引擎_第5页
已阅读5页,还剩36页未读 继续免费阅读

下载本文档

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

文档简介

本科毕业设计论文 题 目 基于Lucene的搜索引擎 专业名称 软件工程 学生姓名 惠敏海 指导教师 袁 柳 毕业时间 2015年6月 设计论文 毕业 任务书一、题目基于Lucene的搜索引擎设计二、指导思想和目的要求题目来源于自行命题,所研究的内容是基于Lucene 的Web搜索引擎。近年来Lucene变得非常流行,他能够增强很多的web站点和桌面应用的搜索能力。尽管当初它是用java编写的,由于使用太广泛,以及热心的开发人员的努力,目前已经可以自由获取大量的针对其它编程语言的Lucene移植版(其中包含C/C+ C# Ruby Perl Python PHP).它的高性能易用的API是它广受欢迎的关键因素之一,诸如数字域的处理功能、有效载荷、实时搜索等性能,以及在索引速度上的显著提升使得他成为领先的搜索工具。三、主要技术指标1.Web的开发环境的搭建2.Lucene的各个组件的使用四、进度和要求第 1 周 调研、构思初步设计方案、工具环境选择、准备开题报告 第 2 周 工具软件下载、安装、周末前提交开题报告最终稿 第 3-4 周 做进一步的需求分析,搭建开发环境,熟悉开发工具,构思总体设计的框架,准备前期的开题报告和任务书检查 第 5 周 梳理设计中的关键步骤并给出主要技术难点初步的解决思路,准备系统的详细设计 第 6 周 系统详细设计阶段,编码开始 第 7 周 子模块编码与单元调试,准备学校安排的中期检查第 8 周 子模块编码及单元调试第 9-10 周 完成编码及系统测试,第11-12 周 撰写论文 第 13 周 周末前提交毕设论文初稿,对系统做完善性修改 第 14 周 指导教师审阅论文、验收成果,根据指导教师意见修改论文并对系统做最终的完善性修改,周末前提交论文最终稿(包括电子版)和软件成果 第 15 周 验收成果,答辩准备开始五、主要参考书及参考资料 1 人民网 IT业界动态 赵峰/GB/channel5/28/20000905/217474.html2 孟涛,闰宏飞,李晓明搜索引擎信息覆盖率模型研究电子学报,2003(8) V013l No83 ASinghal and MKaszkielA case study in web search using TREC algorithmspresented at Proceedings of the tenth international conference on World Wide Web, Hong Kong20014 Brin S,Page LThe Anatomy of a LargeScale Hyper textual Web Search Engine ProcofTth World Wide Web Conf,Brisbane Australia,1 9985百度百科,空间向量模型/link?url=KqXiiFB-05wft6TkPx_7UrXidMpgQZXH4QRZb9EXLcpCmg9H4wf3mq_fhYfskGnuwuw8etxH2ycefRF_ZGxbbq6 王建勇,单松巍,雷鸣,谢正茂,李晓明海量web搜索引擎系统中用户行为的分布特征及其启示中国科学,2001年8月7 Michael McCandless 、Erik Hatcher、 Otis Gospodnetic 牛长流 肖宇 译 人民邮电出版社 Lucene IN ACTION Lucene第二版 2011年6月8百度百科,JDK/link?url=O3kMCfIY5UsocrJQ8VgVeR2Y5f4mBUui67sumbIj7MWgrnH4EmbDoDdKadq8HUvXMn2fpEFkCA6woahIhfcWN8Z6Zl1DbZkYeaXoQ5AJ6xe9百度百科,Tomcat/link?url=uJ1701GcJBZH4i8cfoHzG1qKmXMiohdWAKUzAJ BLZRMCYFOddo6_CQ6-luzokbSdf2F0Hwl_gKcHiQOusB1Faq 10 Apache Tomcat User GuideApache Software Foundation,2006 11 GeorgeReeseJDBC与Java数据库编程(第二版)中国电力出版社,2002 12Cay S.Horstmann Gary Cornell Java 核心技术 卷:基础知识 机械工业出版社2008年4月 13Michael McCandless Erik Hatcher Lucene 实战(第2版) 2011年6月 人民邮电出版社 14Martin Fowler 重构改善既有代码的设计 2010年4月 人民邮电出版社 15惠新宸(鸟哥) 王世江 鸟哥Linux私房菜 2010年7月 人民邮电出版社 16Bruce Eckel Think in java 第四版 2006年2月 机械工业出版社 学生 _ 指导教师 _ 系主任 _ _西北工业大学明德学院本科毕业设计论文摘 要随着互联网的飞速发展,人们越来越多的通过互联网处理许多业务,因此网络信息资源也飞速增长。人们如何在这些海量的网络资源信息中找出对自己有价值的信息也就成了个问题,于是搜索引擎的发展就为人们解决了这方面的问题。 随着大数据时代和云时代的到来,搜索引擎技术也必须的随着潮流发展。不管是在本机,局域网,企业内网,乃至互联网。搜索引擎都是一项即重要又庞大的工程。所以也成为了一大难点。 本文首先对搜索引擎的相关知识和工作原理进行了介绍,在实现搜索引擎的过程中所使用的索引和搜索技术进行探讨还有用到了一部分当前流行的web技术也会加以介绍。 其次研究lucene,分析Lucene实现全文检索和检索过程,尤其对其中文分词及其相关技术进行了叙述。并对Lucene的页面优先算法加以研究。 基于以上关键技术,论文采用java EE平台的开发环境,提出了一种基于Lucene的搜索引擎的解决方案,并完成该系统。 最后,在实现系统对其所采用的技术和方法进行总结,为设计出更优秀的搜索引擎打好基础,使搜索引擎的效率更高,用户体验更好。关键词:搜索引擎,Lucene,webAbstractWith the rapid development of the Internet, more and more people are processed through the Internet, so the network information resources is also growing rapidly.How people can find out the value of information in these massive network resources is also a problem, so the development of search engine for people to solve the problem.With the era of big data and the arrival of the era of the cloud, search engine technology is also necessary witsh the trend of development.Whether in the local area network, intranet, or even Internet.Search engine are important and huge project.So it becomes a difficult problem too.Firstly on search engine related knowledge and working principle were introduced, in used in the process of search engine indexing and searching technology are discussed also useful to a part of the popular web technology will also be introduced.Secondly, the research of Lucene, the process of the full text retrieval and retrieval of Lucene is analyzed, especially the Chinese word segmentation and related technologies are described.And the research on the priority algorithm of Lucene is studied.Based on the key technology, the paper uses the development environment of Java EE platform, A solution of search engine based on Lucene is proposed and the system is completed.Finally, in the implementation of the system to its technology and methods used to sum up, to design a better search engine to lay the foundation, so that search engines more efficient, user experience better.KEY WORDS: Search engine,Lucene,WebII目 录第1章 绪 论31.1 研究的目的和意义31.2 Web搜索引擎概述41.3 Web搜索引擎概述41.4 本文的主要工作51.5 本章小结5第2章 基于Lucene的搜索引擎分析62.1典型的Web搜索引擎分析62.1基于Lucene的Web搜索引擎设计82.2.1 Lucene 技术的简单介绍82.2.2 Lucene 的索引组件92.2.3搜索组件102.3 本章小结12第3章 基于Lucene的搜索引擎的开发123.1 开发环境123.2 搜索资源搜集子系统133.2.1 网络爬虫133.2.2网页搜集163.2.3控制器183.3基于Lucene的Web搜索引擎的索引和检索子系统193.3.1. 词典库193.3.2 基于Lucene的Web搜索引擎的索引和检索过程1934搜索结果返回子系统2035本章小结21第4章 基于Lucene的Web搜索引擎实现的关键技术2241多线程并行网页搜集224.2 使用Lucene实现的索引和检索核心算法234.2.1 Lucene的索引算法234.2.2 Lucene的核心检索算法244.3 页面优先度算法现254.4本章小结27第5章 系统展示285.1 系统架构285.2 系统前端介绍295.3 系统后台逻辑实现介绍295.5 本章小节30第6章 总结与展望31参考文献32致 谢34毕业设计小结35第1章 绪 论1.1 研究的目的和意义 互联网上的信息每天都在不断的增长,而Internet可看做成人类巨大的一个知识信息库,是我们学习和工作必不可少的一个重要的工具,在我们的日常生活中也在时刻的从这个知识信息库中获取信息。 据美国互联网委员会估计,截至今年3月份,全球范围内一共拥有3.04亿互联网用户,互联网上的网页数量也许已经达到了150亿。搜索引擎的出现就可以帮助用户找到他们想要查询的信息。它利用网络爬虫以一定的策略在互联网上搜易、发现资源、并对资源进行提取、处理与加工,是帮助用户找到所需信息资源的一种有效的工具。搜索引擎解决用户搜索信息的难题,是帮助我们快速、准确、有效地获取网络信息资源对的有利工具。现在的大多数Web搜索引擎其收集信息的范围、搜索机制、算法等都不同,用户不得不去学习多个搜索引擎的用法。每个搜索引擎平均只能涉及到 www 资源的30-50% (search engine watch 数据),这样导致同一个搜索请求在不同搜索引擎中获得的查询结果重复率不足 #4%,而每一个搜索引擎的查准率不到 45%。将Lucene应用于Web搜索引擎有以下几个优势:1)由于Lucene的索引建立机制不同,在数据库维护的复杂度和性能方面比传统W|eb搜索引擎有很大优势。2)由于Lucene并不是一个完整的搜索引擎,而只是提供索引和搜索功能,可以很方便的嵌入到各种应用中实现对应用的索引搜索功能,这种特点为制定更加灵活的搜索、结果排序策略提供了可能,从而为用户提供更加符合其需求的灵活多变的搜索引擎。3)Lucene是一个开源项目,其排序算法更加透明,搜索结果势必更加客观公正。本文根据以上Lucene的特点来设计开发一个基于Lucene的小型的搜索引擎,研究Lucene在互联网搜索领域的应用前景。1.2 Web搜索引擎概述搜索引擎,是一种在Web上应用的软件系统,它已一定的策略在Web上搜集合发现信息,在对信息进行处理和组织后,为用户提供Web信息查询服务。从使用者的角度看,这种软件系统提供一个网页界面,通过浏览器提交一个词语或者短语,然后快速返回一个可能和用户输入内容相关的信息列表。这个列表中的每一条目代表一篇网页,每一条目至少包含三个元素标题(从网页的)标签中提取)、摘要(从网页的内容部分截取一段文字)、URL(该网页访问地址)。1.3 Web搜索引擎概述早在Web出现之前,互联网上就已经存在许多旨在让人们共享的信息资源了。这些资源主要存在于允许匿名访问的FTP站点,内容以学术技术报告、研究性软件居多,它们以计算机文件的形式存在,文字材料的编码通常是PostScript或者纯文本。为了便于人们在分散的FTP资源中找到所需的东西,1990年加拿大麦吉尔大学(University ofMcGill)计算机学院的师生开发了一个软件,Archie。它通过定期搜集并分析FTP系统中存在的文件名信息,提供查找分布在各个FTP主机中文件的服务。Archie能在只知道文件名的前提下,为用户找到这个文件所在的FTP服务器的地址。Archie实际上是一个大型的数据库,再加上与这个大型数据库相关联的一套检索方法。该数据库中包括大量可通过FTP下载的文件资源的有关信息,包括这些资源的文件名、文件长度、存放该文件的计算机名及目录名等。尽管所提供服务的信息资源对象(非HTML文件)和W曲搜索引擎的信息资源对象(HTML网页)不一样,但基本工作方式是相同的(自动搜集分布在广域网上的信息,建立索引,提供检索服务),因此人们公认Archie为现代搜索引擎的鼻祖。第二代搜索引擎系统大约出现在1996年,大多采用分布式检索方案,即多个微型计算机协同工作来提高数据规模、响应速度和用户数量。它们一般都保持一个大约5千万网页的索引数据库,每天能够响应1千万次用户检索请求。1997年11月,当时最先进的几个搜索引擎号称能建立从2百万到1亿的网页索引。Altavista搜索引擎声称他们每天大概要承受2千万次查询。互联网上信息量在不断增加,信息的种类也在不断增加。除了网页和文件,还有新闻组,论坛,专业数据库等。同时上网的人数也在不断增加,网民的成分也在发生变化。一个搜索引擎要覆盖所有的网上信息查找需求已出现困难,因此各种主题搜索引擎,个性化搜索引擎,问答式搜索引擎等纷纷兴起。这些搜索引擎虽然还没有实现如通用搜索引擎那样的大规模应用,但随着互联网的发展,我们相信它们的生命力会越来越旺盛。另外,即使通用搜索引擎的运行现在也开始出现分工协作,有了专业的搜索引擎技术和搜索数据库服务提供商。例如美国的Inktomi,它本身并不是直接面向用户的搜索引擎,但向包括Overture(原GoTo)、LookSmart、MSN、HotBot等在内的其他搜索引擎提供全文网页搜集服务。从这个意义上说,它是搜索引擎数据的来源。1.4 本文的主要工作本文根据Web搜索引擎的基本原理,设计开发一个基于Lucene的小型搜索引擎,核心是使用Java提供的Lucene包实现Web搜索引擎的索引和检索部分,研究Lucene对于解决搜索引擎索引数据库的维护、查询内容的分析等问题的应用。同时还实现了多线程的网页搜集系统,提高网页搜集的效率,并设计了搜索结果的排序算法,将最大限度符合用户需求的搜索结果返回给用户。1.5 本章小结本章介阐述了搜索引擎的必要性、绍了Web搜索引擎的概念、发展史和研究状态,并且对本文后面的大概期望进行了说明第2章 基于Lucene的搜索引擎分析2.1典型的Web搜索引擎分析下图2.1是一个典型的搜索引擎结构图图2.1 搜索引擎结构图上图中的各个结构的功能如下:1)搜集器:搜索引擎服务的基础是一批预先直接或间接搜集好的网页。而搜索器的功能是在互联网中漫游,发现和抓取这些网页。它常常是一个计算机程序,日夜不停地运行。它要尽可能多、尽可能快地搜集各种类型的新信息,同时因为互联网上的信息更新很快,所以还要定期更新己经搜集过的旧信息,以避免死连接和无效连接。目前的基本搜集策略大概有两种:(1)批量搜集。这种策略每次搜集都会替换上一次的内容。由于每次都是重新来一次,对于大规模搜索引擎来说,每次搜集的时间通常会花几周4。而由于这样做开销较大,通常两次搜集的间隔时间也不会很短。这样做的好处是系统实现比较简单,主要缺点是“时新性”不高,还有重复搜集所带来的额外带宽的消耗。(2)增量搜集。这种搜集策略开始时搜集一批,往后只是搜集新出现的网页和在上次搜集后有过改变的网页,并且发现自从上次搜集后已经不再存在的网页,从库中删除。在实际搜集抓取网页过程中,最常见的是采取一种爬取的方式。还有一种方法是让网站拥有者主动向搜索引擎提交它们的网址,系统在一定时间内定期定向向那些网站派出“蜘蛛”程序,扫描该网站的所有网页并将有关信息存入数据库中。2)控制器:如果是简单的网页搜集,页面在万页左右,并不需要控制器,控制器是大规模搜索引擎专有的模块,其作用是向大规模搜索引擎稳定、持续的提供网页数据,通常需要每天收集上百万网页。控制器的核心是要综合解决效率、质量和“礼貌”问题。所谓效率,在这里就是如何利用尽量少的资源来完成预定的网页搜集量。在批量搜集的情况下,在一定时间内搜集到的网页量自然是越多越好。由于网页之间存在的独立性,利用许多台计算机同时来做这项工作是一个可行的方法。所谓质量问题,指的是在有限的时间,搜集有限的网页,希望它们尽量是比较重要的网页,或者说不要漏掉那些很重要的网页。而哪些网页是比较重要的,这个问题也没有一个统一认可的标准。现在采取的策略多是将流行度作为评价一个网页重要成的的参考,即越多人看过的网页越重要。在这个标准下,将一个网站从主页开始向下,按照链接的深度将网页组织成多层体系,上层中的网页统计上会比下层的网页重要些,通过PageRank来衡量,即较靠近主页的网页PageRank值较高。这样,首先得到尽量多的主页,然后从主页开始进行宽度优先搜索。 “礼貌问题指的是搜集活动过分集中在几个网站上,或在很短的时间内从一个网站上抓取过多的网页。过于密集的抓取活动会阻碍普通用户对该网站的访问,严重的甚至会造成与黑客拒绝服务(Denial of Servide,DoS)攻击一样的现象,从而影响网站方的利益。因此,适当地规划网页的抓取,限制单位时间内对一个网站抓取网页的数量,也是搜索引擎必须要认真对待的问题。3)原始数据库:也称为页面存储库。它将搜集器所搜集到的海量网页数据存储起来,以供索引器进行处理。4)索引器:索引器的功能是理解原始数据库中存储的信息,从中抽取出索引项,用于表示文档以及生成文档库的索引表。索引项有客观索引项和内容索引项两种:客观项与文档的预习内容无无关,入作者名、URL、更新实现、编码长度、链接流行度等等;内容索引项是用来反映文档内容的,如关键词及其权重、短语、单字等等。内容索引项可以分为单索引项和多索引项两种。单索引项对于英文单词比较容易提取,引文单词中间有空格分隔;对于中文必须进行词语的切分。索引表一般使用某种形式的倒排表,即有索引项查找相应的文档。索引表也可能要记录索引项在文档中出现的位置,以便检索器计算索引项之间的相邻关系。5)索引数据库:索引数据库中存储的是经索引器对原始数据库中的信息处理后所得到的索引表,以供检索器进行处理。6)检索器:检索器根据用户查询在索引数据库中快速的查出文档,并通过对文档与查询相关度的评价,在综合其他因素将得出结果进行排序,再以某种机制反馈给用户。常用的信息检索类型有集合理论模型、代数模型概率模型和混合模型四种。2.1基于Lucene的Web搜索引擎设计2.2.1 Lucene 技术的简单介绍1)初识Lucene:Lucene其实是一强大的java搜索库,它能让你很轻易的将搜索功能加入到任何程序中。它是目前使用最为广泛的信息搜索库,它能够增强好的Web站点和桌面应用程序的搜索能力。尽管他是用Java编写的,由于使用太广泛,以及热心开发人员的努力目前你洗净可以自由获取大量的针对其他编程语言的Lucene移植版本(c/c+ c# Ruby Python PHP)。需要指出的是,Lucene仅仅是一个提供搜索功能的类库,所以你还需要根据实际情况自行完成搜索程序的其他模块(例如网页抓取 文档处理s 服务器运行 用户几面管理等)7。2)Lucene 的历史:Lucene最初由Doug Cutting 编写。当时其工具包可以从SourceForge的Lucene主页下载。在2001年9月,Lucene加入了Apache软件基金会的jakarta家族并开始提供高质量Java开元软件产品;2005年该项目一跃成为顶级的Apache项目。目前Lucene包含大量的子项目(Lucene是作者妻子的中名,同事也是他外祖母的姓)7.目前已经有很多Java项目都使用了Lucene作为其后台的全文搜索引擎,比较著名的有:Jive:WEB论坛系统、Eyebrows:邮件列表HTML归档浏览查询系统。Cocoon:基于XML的web发布框架,全文检索部分使用了Lucene、Eclipse:基于Java的开放开发平台,帮助部分的全文索引使用了Lucene。 2.2.2 Lucene 的索引组件当需要搜索大量的文件然后找出其中包含某个词或短语的文件时不能对太大的文件集或者太大的文件进行处理,这时我们就要引入索引。为了快速的搜索大量的文本,你必须首先建立针对文本索引,将文本内容转换成能够进行快速搜索的格式,从而消除慢速顺序扫描处理所带来的影响。这个过程就叫做索引操作(indexing),它的输出就叫索引(index)。就Lucene来说,索引是一个精心设计的数据结构,通常作为一组索引文件存储在文件系统中。整个索引过程包含了一组逻辑上互不关联的步骤,下来将各个分析。1)获取内容:这步操作需要使用到网络爬虫或者蜘蛛程序来搜索和界定需要的索引内容。Lucene作为一款核心搜索库,并不提供任何功能来实现内容获取。内容获取的实现完全依赖于第三方的软件。目前有大量的开源爬虫软件可以实现这个功能,下面列出几个较为流行的爬虫软件:Solr : (/solr),Apache Lucene 项目的,支持从关系数据库XML文档中提取原始数据,以及能够通过集成Tika来处理复杂文档(Tika是一个具有内置解析器用于处理各种文档类型程序框架)。Nutch:(http:/L/nutch),另外一个Apache Lucene子项目,它包含大规模的爬虫工具,能够抓取和分辨Web站点数据。Grub:(),比较流行的开源Web爬虫工具。Heritrix:是一款开源的Internet文档搜索程序()。Drods:(/droids)是另一个Apache Lucene子项目,目前正处于筹备状态。Aperture :(),它支持从Web站点、文件系统和邮箱中抓取,并解析和索引其中的文本数据。利用这些爬虫工具可以提供一些针对诸如Web站点、数据库、通用内容管理系统以及文件系统等内容存储系链接。2)建立文档:获取原始内容后,就需要对这些内容进行索引,先将这些内容转换成部件,以供搜索引擎使用。文档主要包括几个几个带值的域,比如标题、正文、摘要、作者、和URL。一般一个电子邮件信息作为一个文档,一个PDF文档或一个网页作为一个文档。Lucene提供了一个API来建立域和文档,但是不提供任何建立他们的程序逻辑,因这些逻辑完全由调用API的应用程序根据具体情况完成。Lucene也不提供文档过滤器,但在Apache还有用一个项目叫做Tika,能很好的实现文档过滤。3)文档分析:我们必须将文本分割成一系列独立的原子元素(语汇单元)。这个环节需要考虑许多的问题,比如如何处理连接一体的各个单词,用户的搜索关键词中存在错别字,当用户进行搜索操作时,我们是否要帮助用户同时搜索同义词,当用户搜索英文内容时是否将该单词的各种形式(单数、复数、进行时态、过去时态等)转换成为词根形式。Lucene提供了大量内嵌的分析器能轻松控制这步操作。也很容易搭建自己的分析器,或者联合Lucene的词汇单元化工具和语汇单元过滤器来创建自定义的分析链接,来定制词汇单元的创建方式。4)文档索引:在索引步骤中,文档将被加入到索引列表。Lucene为此步骤提供了所有必要的支持,并且通过一个简单的API就完成了索引操作。2.2.3搜索组件1)搜索质量:搜索处理的过程就是从索引中找单词,从而找到包含该单词的文档。搜索质量主要由查准率和查全率来衡量。Lucene的benchmark、contrib模块就是用来衡量搜索程序的查准率和查全率。2)用户搜索界面:用户搜索界面是用户在与搜索引擎交互时的可视界面。搜索界面是整个搜索引擎与用户的直接对话,所以需要要在用户交互方面考虑细致的问题。还要考虑到以后的升级开发的扩展性。Lucene不提供默认的用户搜索界面;需要自己设计,当用户使用搜索界面进行搜索时,会提交一个搜索请求,该请求需要提前转换成文合适的查询对象格式,以便搜索引擎使用。如图2.2为本项目的用户搜索页面 图2.2 首页截图3)建立查询:当前台搜索页面通过HTML表单或者Ajax请求的形式向搜索引擎服务器提交一条搜索数据时,必须将数据转换成搜索引擎使用的查询(Query)对象格式,这就称为建立查询。Lucene提供了一个称之为查询解析器(QueryParser)的强大开发包,可以根据通用查询语法将用户输入的文本处理成查询对象。还可以再查询语句中创建过滤器,用来限制查询范围。4)搜索查询: 通过对索引的查询与匹配从而以文档的形式返回一个查询结果,结果返回时需对结果集进行排序。Lucene在实现搜索查询模块式采用向量空间模型和纯布尔模型,可以让开发者根据不同的需求来选择采用哪一种模型。5)结果展示:获取匹配查询结果集并进行排序后就需要用一种直观、经济的方式吧结果展现给用户。在给用户展现搜索结果的页面上,为了更好的用户体验,务必不能把搜索框省去,使用户可以循环的进行操作。2.3 本章小结当前台搜索页面通过HTML表单或者Ajax请求的形式向搜索引擎服务器提交一条搜索数据时,必须将数据转换成搜索引擎使用的查询(Query)对象格式,这就称为建立查询。Lucene提供了一个称之为查询解析器(QueryParser)的强大开发包,可以根据通用查询语法将用户输入的文本处理成查询对象。还可以再查询语句中创建过滤器,用来限制查询范围。第3章 基于Lucene的搜索引擎的开发3.1 开发环境下对本文的开发环境与所用到的工具及技术进行说明。1)JDK1.7:JDK(Java Development Kit)是Java语言的软件开发工具(SDK)。1997 年Servlet技术的产生以及紧接着JSP的产生,为Java对抗PHP,ASP等等服务器端语言带来了筹码。1998年,Sun发布了EJB1.0标 准,至此J2EE平台的三个核心技术都已经出现。于是,1999年,Sun正式发布了J2EE的第一个版本。并于1999年底发布了J2EE1.2,在 2001年发布了J2EE1.3, 2003年发布了J2EE1.4。82)Tomcat7:Tomcat是Apache软件基金会 (Apache Software Foundation)的Jakarta项目中的一个核心项目,由Apache、 Sun 和其他一些公司及个人共同开发而成。由于有了Sun 的参与和支持,最新的Servlet 和JSP 规范总是能在Tomcat 中得到体现,Tomcat 5支持最新的Servlet 2.4 和JSP 2.0 规范。因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。目前最新版本是8.09。Tomcat也可以与其他软件集成起来实现更多的功能。如与JBoss集成起来开发EJB。3.2 搜索资源搜集子系统3.2.1 网络爬虫网络爬虫是搜索引擎抓取系统的重要部分。它的主要任务就是抓取互联网上的 网页然后形成一个内容的镜像备份。1)网络爬虫的基本结构与流程如图3.1为网络爬虫的一个简单的结构图图3.1 爬虫结构图流程如下:(1)选取一部分根站点作为种子URL;(2)将这些根节点的URL放入待抓取URL队列;(3)在待抓取URL对列中抓取页面的相关信息(DNS信息,主机IP,摘要)存储进已下载网页库中。然后将URL放进已抓取URL队列。(4)分析已抓取URL队列中的URL,分析各个抓取节点的连接,并且将URL放入待抓取URL队列,从而进入一个递归算法。2)抓取文档的分类(1)在已下载库中的未过期的文档(2)已过期的文档,由于在下载库中存在的页面文档只是一份镜像,实际状态中的互联网是在不断的变化的,一部分互联网上的内容已经产生了变化,这时就会出现原始资料库里的镜像文档与互联网上的资料不统一的情况,此时这个网页镜像文档就属于过期文档。(3)在待抓取URL队列中待下载的页面。(4)在已知的网页中还没有抓取下来,也没有在待抓取URL队列中,但是可以通过对已抓取页面或者待抓取页面中所含有的URL分析获得URL。(5)一些爬虫不可到达的网页,称为不可知网页。3)抓取策略:在爬虫系统中,待抓取URL队列中的URL的排序从而抓取页面,这种排序后的抓取就叫做抓取策略。下面说明几种抓取策略。(1)深度优先遍历策略 Depth-First Traversal图3.2 节点图深度遍历需要找到一个遍历的根节点,如图节点A为此图的根节点。以此访问节点的相邻节点采用的搜索方式的特点是尽可能先对纵深方向进行搜索。所以 图3.2遍历出的结果为A-F-G E-H-I B C D(2)广度优先遍历策略广度优先遍历策略的基本思路是,将新下载网页中发现的连接 直接插入待抓取URL队列的末尾。也就是指网络爬虫会先抓取起始网页中链接的所有网页,然后再选择其中的一个链接网页,继续抓取在此网页中链接的所有网页。以广度遍历的思路遍历图3.2的结果为A-B-C-D-E-F G H I (3)反向连接数策略反向链接数是指一个网页被其他网页链接指向的数量。反向链接数表示的是一个网页的内容受到其他人的推荐的程度。因此,很多时候搜索引擎的抓取系统会使用这个指标来评价网页的重要程度,从而决定不同网页的抓取先后顺序。在真实的网络环境中,由于广告链接、作弊链接的存在,反向链接数不能完全等他我那个也的重要程度。因此,搜索引擎往往考虑一些可靠的反向链接数。3.2.2网页搜集网页搜集的具体过程包括:1) 定义URL类和Page类。如图3.3为URL类的代码定义截图图3.3 URL类图(1)URL类抓取的第一步就是通过在URL库中的URL输入作为根节点,因此在编码过程中需要URL的实体类对其进行封装。URL的格式一般为以下格式。图3.4 URL格式图Scheme表示协议名称,Net_loc表示网络位置,包括主机名和端口号。下面四部分对应URL类中的m_sPath: Path 表示路径。 Params 表示对象参数。 Query 表示查询信息,也经常记为request。 Fragment 表示片段表示。 URL类的实现主要是解析出net_loc部分,用于组成消息体,发送给服务器。 由构造函数BegineURL()执行具体的字符串匹配找出协议名,主机名, 请求信息和端口号,找到后赋值给Url类的成员变量保存。(2)Page类 页面信息保存在Page类中。Page类的代码截图如3.5。图3.5 page类截图2)与服务器建立连接在由URL得到服务器地址、主机名后,就具备类了与服务器建立连接的条件。建立连接的过程是异步的,服务端需要有一个监听的进程来监听文帝端口绑定的socket进程有没有收到新的请求,连接一但被接受,操作系统自动创建新的socket使之与客户端连接成通信的通道,这样的服务就可以在原来的Socket上继续监听其他客户的请求了。在与服务器建立连接的时候,使用了非阻塞连接。超过定时,就放弃。3.2.3控制器控制器主要的作用如下1)网页权重的计算搜集的质量问题在搜集网页时需要控制的因素有很多比如需要考虑被搜集网页被其他网页引用的次数,叫做网页的入度,网页被引用的越多,网页的入度越大。还需要考虑到目录的深度,深度越小越有利于用户浏览到。根据这几个页面的参数我们可以根据公式算取该网页的权。为weight(p)=f(indegree(p),indegree(father_p),mirror(p),directorydepth(p)其中weight(p)表示网页p的权重,indegree(p)表示网页p的入度数,indegree(father_p)表示网页p的父网页的入度函数,mirror(p)表示网页p的镜像度函数,directoryDeptn(p)表示网页的目录深度函数。2)避免网页的重复搜集控制器通过两种策略来避免搜集器对网页的重复搜集。a通过“未访问表和“已访问表记录未访问和以访问的URL, “未访问表中存储准备取入待访问队列的URL, “已访问表中存储已经请求过网页的URL。这样当gatherer因为访问新的网页解析出新的URL后,根据“未访问表,“已访问表,就可以判断哪些工作已经完成,从而避免重复搜集。b解决域名与IP的对应问题。由于网站可能采用虚拟主机或DNS轮转,导致出现URL与IP的多对一或一对多的情况。解决这个问题是一个逐渐累积的过程,首先要累积到一定数量的域名和IP,然后把这些域名和IP对应的首页和首页链接出的最开始的几个页面抓取回来。如果比较结果一样,则应该归为一组。以后搜集的时候可以只选择其中的一个进行搜集。3.3基于Lucene的Web搜索引擎的索引和检索子系统3.3.1. 词典库1)将页面存储库中的网页文档分成词典库中包含词的集合,由此建立前向索引表和后向索引表。2)为检索器提供单词查找帮助,即将待查的文本单词转化为单词标识号,根据这些单词标识号在后向索引表中查询对应的所有文档标识号。为了保证及时响应速度,词典库应该能够整个放入内存当中。同时由于每个单词长度变化很大,单词总数达到数百万个,所以词典库采取不定长记录紧缩存储的方式,附加一个哈希表辅助查询11,其中,哈希值是根据各单词的所有字符运用一定的算法(如各字符的ASCII值相加)得出的,哈希表以哈希值排序。对于相同哈希值的单词,则顺次加入其后的冲突链表中。3.3.2 基于Lucene的Web搜索引擎的索引和检索过程图3.6检索过程图图中所表示的索引和检索主要分为3个过程:1)图中箭头l表示的过程是:页面存储库中的页面经过词典库的分析,将页面存储库中的网页信息集合转换为包含词典库中词的集合。这样可以减少无效信息,提高检索速度。2)图中箭头2表示的过程是:索引器按照词典库中包含的词,对应这些词在前向索引列表中查找,建立以这些词为标识(WordID)的后向索引列表,以备检索器检索使用。3)图中箭头3表示的过程是:当用户输入一个查询信息时,首先经过一定的分词,将查询内容分解为一个或多个关键词的集合,检索器按照这个集合中的元素在已建立的后向索引表中查找到对应每个元素的文档标识号的集合,再将结果返回。34搜索结果返回子系统3.4.1 搜索结果页面的筛选经过初步查询后,得出的是一个未经处理的结果页面的集合,需要经过排序后,再去掉过多的结果页面。首先定义通过查询所得到的每个结果页面的类:public class SearchedDoc /这个类即为通过查询后得到的每个页面的相关信/息String SearchedURL: /搜索结果的URL链接,指向搜索结果页面类。String SearchedTitle;String Searchedlnfo;/搜索的摘要int PageWeight;/ 此页面优先度public void SearchedDoe() /无参构造方法SearchedURL=getSearchedURL0;SearchedTitle=getSearchedTitle0;Searchedlnfo=getSearchedlnf00;PageWeight=getResultWeight0;定义用于结果显示的类:public class Result 用于显示结果的类。String ResultURL;String ResultTitle;String Resultlnfo;最后在一个主类中将SearchedDoc类排序,然后将前100个结果赋给Resultpublic class Mainpublic static void main(String args)SearchedDocsearchedDoc=new SearchedDoc10000;/所有搜索到的页面的对象数组.Result result=new Result100;/ 最终返回给用户的结果页面数组,因为用户一般只关心头几页搜索结果,所以这里取100个页。SearchedDoc tempList= new SearchedDoc10000用来记录排序后的页面对象数组public void quettySearchedDoc(seaxchedDocPageWeight):/对SearchedDoc口按照页面优先度排序,返回排好的tempList对象数组。for(int i = 0;i result.1ength;i+)resulti=new Result 0:resultiResultURL:temListiSearchedURL:resultiResultTitle=temListiSearchedTitle:resultiResultInfo=temListiSearchedInfo: 35本章小结本章首先简单介绍了开发所用到开发环境,再根据基于Lucene的Web搜索引擎的结构逐一研究分析并实现了系统3个模块:网页搜集子系统、应用Lucene实现的索引和检索模块以及结果返回模块。并且还详细阐述了模块间的协同工作。第4章 基于Lucene的Web搜索引擎实现的关键技术41多线程并行网页搜集为了提高网页搜集的效率,本文实现的基于Lucene的Web搜索引擎采用多道搜集程序并行搜集网页,多道搜集程序使用多线程技术实现,每个线

温馨提示

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

评论

0/150

提交评论