




已阅读5页,还剩48页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
搜索引擎的研究与实现摘要网络中的资源非常丰富,但是如何有效地找到自己需要的信息却是一件困难的事情。网络搜索引擎应运而生。本文首先详细介绍了网络搜索引擎的系统结构,然后从网页信息抓取、网页内容分析、网页索引建立、用户检索与结果排序等方面进行详细的说明。为了更加深刻的理解这种技术,本人还亲自实现了一个自己的搜索引擎,能够实现网页内容的抓取和搜索功能,也能够自己添加内容并显示在搜索结果中。网络搜索引擎根据初始配置,自动从网络上抓取信息并处理,将提取到的信息结构化,然后建立索引。然后通过WEB服务器接收用户请求,在索引库中找到相关结果并排序,最终通过页面的形式呈现给用户。本人在介绍搜索引擎的章节中除了详细的阐述技术核心外还结合了搜索引擎的实现代码来说明,图文并茂、易于理解。关键词搜索引擎;网络;LUCENERESEARCHANDIMPLEMENTATIONOFSEARCHENGINEABSTRACTTHERESOURCESINTHEINTERNETAREABUNDANT,BUTITISADIFFICULTJOBTOSEARCHSOMEUSEFULINFORMATIONSOASEARCHENGINEISTHEBESTMETHODTOSOLVETHISPROBLEMTHISARTICLEFISTINTRODUCESTHESYSTEMSTRUCTUREOFSEARCHENGINEBASEDONTHEINTERNETINDETAIL,THENGIVESAMINUTEEXPLANATIONFORMSPIDERSEARCH,ENGINEANDWEBSERVERINORDERTOUNDERSTANDTHETECHNOLOGYMOREDEEPLY,IHAVEPROGRAMMEDAWEBSEARCHENGINEBYMYSELFTHENEWSSEARCHENGINEISEXPLAINEDANDSEARCHEDACCORDINGTOHYPERLINKFROMAAPPOINTEDWEBPAGE,THENINDEXESEVERYSEARCHEDINFORMATIONANDADDSITTOTHEINDEXDATABASETHENAFTERRECEIVINGTHECUSTOMERSREQUESTSFROMTHEWEBSERVER,ITSOONSEARCHESTHERIGHTPAGESFORMTHEINDEXENGINE。INTHECHAPTEROFINTRODUCINGSEARCHENGINE,ITISNOTONLYELABORATETHECORETECHNOLOGY,BUTALSOCOMBINEWITHTHEMODERNCODE,PICTURESINCLUDED,EASYTOUNDERSTANDKEYWORDSSEARCHENGINENETWORKLUCENE目录摘要IABSTRACTII1引言12搜索引擎研究221搜索引擎发展历史2211分类目录时代2212文本检索时代2213整合分析时代2214用户中心时代222搜索引擎的结构2221WEB搜索引擎体系结构2222网络机器人3223网页分析器4224网页索引器5225网页搜索器523现代搜索引擎的主要技术6231倒排索引技术6232分布式技术624小结73开发平台和技术831JAVA编程语言832MYECLIPSE933TOMCAT934LUCENE10341什么是LUCENE10342索引和搜索10343LUCENE能做什么10344LUCENE的工作方式1135SPRING1136STRUTS21237MYBATIS124搜索引擎的总体设计1341系统概述1342系统需求1343系统结构1344小结145网络机器人的实现1551什么是网络机器人1552网络机器人结构分析15521如何解析HTML16522工作流程1753网络机器人的实现17531实现说明17532HTML页面结构17533代码分析1854内容处理18541正文提取1955小结226网页索引程序的实现2361索引程序简介2362准备工作23621分词23622特征值抽取2463LUCENE索引器26631实现原理26632存储结构27633提高性能2864实现28641代码说明2865小结307网络搜索程序和客户端的实现3171网络搜索程序简介3172检索3173排序31731JACCARDCOEFFICIENT32732向量空间模型VECTORSPACEMODEL,VSM3274WEB客户端实现33741JAVAEE与WEB容器33742查询的基本方法34743请求处理34744主要代码34745前端界面3575小结37结论38参考文献39致谢40外文原文41中文翻译451引言面对浩瀚的网络资源,搜索引擎为所有网上冲浪的用户提供了一个入口,毫不夸张的说,所有的用户都可以从搜索出发到达自己想去的网上任何一个地方。因此它也成为除了电子邮件以外最多人使用的网上服务。搜索引擎技术伴随着WWW的发展是引人注目的。搜索引擎大约经历了三代的更新发展第一代搜索引擎出现于1994年。这类搜索引擎一般都索引少于1,000,000个网页,极少重新搜集网页并去刷新索引。而且其检索速度非常慢,一般都要等待10秒甚至更长的时间。在实现技术上也基本沿用较为成熟的IR(INFORMATIONRETRIEVAL)、网络、数据库等技术,相当于利用一些已有技术实现的一个WWW上的应用。在1994年3月到4月,网络爬虫WORLDWEBWORMWWWW平均每天承受大约1500次查询。大约在1996年出现的第二代搜索引擎系统大多采用分布式方案(多个微型计算机协同工作)来提高数据规模、响应速度和用户数量,它们一般都保持一个大约50,000,000网页的索引数据库,每天能够响应10,000,000次用户检索请求。1997年11月,当时最先进的几个搜索引擎号称能建立从2,000,000到100,000,000的网页索引。ALTAVISTA搜索引擎声称他们每天大概要承受20,000,000次查询。2000年搜索引擎2000年大会上,按照GOOGLE公司总裁LARRYPAGE的演讲,GOOGLE正在用3,000台运行LINUX系统的个人电脑在搜集WEB上的网页,而且以每天30台的速度向这个微机集群里添加电脑,以保持与网络的发展相同步。每台微机运行多个爬虫程序搜集网页的峰值速度是每秒100个网页,平均速度是每秒485个网页,一天可以搜集超过4,000,000网页搜索引擎一词在国内外因特网领域被广泛使用,然而他的含义却不尽相同。在美国搜索引擎通常指的是基于因特网的搜索引擎,他们通过网络机器人程序收集上千万到几亿个网页,并且每一个词都被搜索引擎索引,也就是我们说的全文检索。著名的因特网搜索引擎包括FIRSTSEARCH、GOOGLE、HOTBOT等。在中国,搜索引擎通常指基于网站目录的搜索服务或是特定网站的搜索服务,本人这里研究的是基于因特网的搜索技术。2搜索引擎研究21搜索引擎发展历史211分类目录时代分类目录是将网站信息系统地分类整理,提供一个按类别编排的网站目录,在每类中,排列着属于这一类别的网站站名、网址链接、内容提要,以及子分类目录,可以在分类目录中逐级浏览寻找相关的网站,分类目录中往往还提供交叉索引,从而可以方便地在相关的目录之间跳转和浏览。也可以使用关键词进行检索,检索结果为网站信息,这种检索也称之为网站检索。分类目录专案效仿一些在20世纪最重要的编辑员/志愿者项目。就像牛津英文字典通过志愿者的努力成为权威的工具一样,OPENDIRECTORY跟随着它的脚步也成为了权威的互联网分类目录。212文本检索时代文本检索,亦称为自然语言检索,指不对文献进行任何标引,直接通过计算机以自然语言中的语词匹配查找的系统。文本检索进行匹配的对象,可以是整个出版的文本,包括文章、报告甚整本图书,也可以是它的部分,如文摘、摘录或只是文献的题名。以整个文献正文为对象进行的匹配查找,称为全文检索。这种方式无需标引,数据库制作快,可以很快投入运行。213整合分析时代这一代的搜索引擎所使用的方法大概是和我们今天的网站的外部链接形式基本相同,在当时,外部链接代表的是一种推荐的含义,通过每个网站的推荐链接的数量来判断一个网站的流行性和重要性。然后搜索引擎再结合网页内容的重要性来和相似程度来改善用户搜索的信息质量。这种模式的首先使用者是GOOGLE,GOOGLE不仅为首次使用并且大获成功,这一成就在当时引起了学术界和其他商业搜索引擎的极度关注。后来,学术界以此成就为基础,提出了更多的改进的链接分析算法。大多数的主流搜索引擎都在使用分析链接技术算法。这就是第三代搜索引擎。214用户中心时代这一时代的搜索引擎的特点是以用户为中心。其与第三代搜索引擎最大的区别是,对于相同的搜索关键词,不同用户得到的搜索结果可能不同。第四代搜索将把个性化信息及人际推荐关系叠加到链接分析上,大大改善搜索结果排序效果;同时,跨媒体搜索将实现诸如用图片搜索图片等功能,打通文字,图片,视频,声音的界限,颠覆现在全部基于关键字的搜索方法,为用户带来更加直观的搜索体验。并且,社交关系的引入将使网页排序质量大大提高。22搜索引擎的结构221WEB搜索引擎体系结构在搜索引擎的后台,有一些用于搜集网页信息的程序。所收集的信息一般是能表明网站内容(包括网页本身、网页的URL地址、构成网页的代码以及进出网页的连接)的关键词或者短语。接着将这些信息的索引存放到数据库中。一个典型的网络搜索引擎的结构如图21所示控制器收集器索引器原始数据库索引数据库网页检索器用户接口用户行为日志数据库用户日志分析图21搜索引擎的结构222网络机器人又称为网络爬虫,网络蜘蛛等。在搜索引擎系统中扮演搜集器的角色。它通常是一个计算机程序,在需要时运行。网络机器人通过统一资源定位符(URL)来访问网络资源。它会从一个入口URL列表开始,通过一定的算法顺序,下载并通过网页分析器分析网页,从网页中发现新的URL地址,并将新发现的URL添加到待访问的URL列表中。网络爬虫将得到的网页保存在本地网页库中,以备网页分析器和索引器进行处理和使用。互联网中的网页数以亿计,一个网络机器人应该尽可能多地覆盖网络,但不可能访问到所有的网页。如何更加有效地下载网页就成了网络机器人设计过程中最需要解决的问题。为了有效利用带宽资源和处理能力,抓取过程中需要算法和策略支持。常用的算法有深度优先搜索策略、IP段扫描搜索策略、广度优先搜索策略等。通常主要采用广度优先搜索策略,保证对互联网的整体覆盖率。同时配合探测性的搜索策略,快速发现新的网络资源。每个搜索策略的具体介绍如下1深度优先搜索策略深度优先的基本方法是依次访问下一级的网页链接,直到不能再深入为止。网络机器人完成一个搜索分支后返回到上一个链接节点进一步搜索其他链接。当所有链接已经遍历之后,搜索任务结束。深度优先算法比较适合垂直搜索或站内搜索等应用环境。对大规模的互联网搜索,由于部分网站内容层次结构很深,会造成巨大的资源浪费。2IP段扫描搜索策略IP段扫描搜索策略的基本思想是以某种策略找到一批起始IP地址。从设定的IP地址,按照IP地址递增的方式搜索后续的每一个IP地址中的信息。这种方法可以解决网络蜘蛛对HTML文件中指向其他WEB站点的超链接地址的过度依赖,能够发现新的孤立资源。但是这种策略计算范围巨大,不适用于大规模的搜索,但可以用于配合其他策略在小范围内全面搜索。3广度优先搜索策略广度优先搜索策略主要按照目录层次比较浅的网页内容优先的搜索方法。网络机器人先访问所有同一层次的内容,然后再继续搜索下一层。这种方法保证了对网页内容的有效控制,避免遇到一个无穷深层分智时无法结束的问题。广度优先搜索策略实现方便,不需要存储大量的中间节点,目前被广泛采用。存在的问题是需要话费比较长的时间才能到达深层的网页。单个网站的访问速度通常不高,为了提高网络利用率,网络机器人通常会采用多线程技术来同时访问多个网页。网络机器人遇到的另一个问题是如何高效且正确的提取网页中的URL。对于普通的HTML中你的链接比较容易。但是随着XHTML技术的普及,大量的网页不再是简单的链接关系。很多网络入口都包含在JAVASCRIPT代码中,甚至有些是动态生成的。如何正确地得到这些URL,如何解决死链,如何处理非文本内容等,都是网络机器人需要解决的问题。223网页分析器网络机器人搜集来的网页信息或下载的文档一般要首先进行分析,用于后续建立索引。对于通用型网络搜索引擎,网页提取技术主要对下载的数据进行正文提取分析操作;对于垂直搜索,在结构化操作以后,还要对其进行数据挖掘,进行领域信息识别,从而提高信息的质量。我呢当分析技术一般包括分词、过滤、转换等工作,具体处理与文档类型、搜索引擎的具体结构和算法密切相关。网页分析中的一项关键技术就是分词。与英文为代表的拉丁语系语言相比,英文以空格作为天然的分隔符,而中文由于继承自古代汉语的传统,词语之间没有分隔。古代汉语中除了连绵词和人名地名等,词通常就是单个汉字,所以当时没有分词书写的必要。而现代汉语中双字或多字词居多,一个字不再等同于一个词。在中文里,“词”和“词组”边界模糊。现代汉语的基本表达单元虽然为“词”,且以双字或者多字词居多,但由于人们认识水平的不同,对词和短语的边界很难去区分。中文分词对于搜索引擎来说,最重要的并不是找到所有结果,因为在上百亿的网页中找到所有结果没有太多的意义,没有人能看得完,最重要的是把最相关的结果排在最前面,这也称为相关度排序。中文分词的准确与否,常常直接影响到对搜索结果的相关度排序。从定性分析来说,搜索引擎的分词算法不同,词库的不同都会影响页面的返回结果。现有的分词算法可分为三大类基于字符串匹配的分词方法、基于理解的分词方法和基于统计的分词方法。按照是否与词性标注过程相结合,又可以分为单纯分词方法和分词与标注相结合的一体化方法。224网页索引器网页需要建立索引才能被后续流程使用。设计良好的索引可以加快搜索速度,能够更准确地进行网页定位,从而减少设计开销。索引的功能是对搜索器所搜索的信息进行分析处理,从中抽取索引项,用于表示文档以及生成文档库的索引表。搜索引擎普遍借鉴了传统信息检索中的索引模型,包括倒排文档、矢量空间模型、概率模型等。为了快速查找特定的信息,建立索引数据库是一种常用的方法,即将文档表示为一种便于检索的方式,并存储在索引数据库中。索引数据库的格式是一种特殊的数据存储格式。索引结构和效率的好坏是WEB信息检索系统的关键,要求易于实现和维护、检索速度快、空间需求低。倒排索引的结构如图22所示索引项1索引项2索引项3索引项4索引项5文件1文件3文件1文件2文件3文件1文件2文件1文件2文件3文件图22倒排索引的结构索引器是用来建立索引的软件程序。索引器的主要功能是分析处理文档的内容和信息,把文档转化成一系列的索引项。索引中的最小信息单位是索引项,索引项除了文档内容,还可以包含文档的大小、时间、类型、存放路径等描述信息和附属信息。索引项可以是短语、词组或单字。索引项存储的信息包括关键词及其权重,以及来源URL、更新时间、编码格式、链接情况等。搜索引擎的索引通常使用倒排表,也就是常说的倒排索引。根据要求的速度和精度等要求,搜索引擎可以采用复合索引和简单索引。记录索引项在文档中出现的位置,对检索时的匹配度计算也很有好处。索引表也可能要记录索引项在文档中出现的位置,以便检索器计算索引项之间的相邻或接近关系。225网页搜索器用户输入检索词后,搜索引擎返回的结果需要根据语义相关性和其他权值进行排序。通常的网页排序除了基本的检索词语素相关外,还要根据网页的连接情况,分析网页自身的重要性,保证用户得到重要的网页信息。中文搜索引擎中经常由于语义歧义和差别,造成关键字检索将诶过的语义相关性效果较差。一词多义造成的搜索结果和用户本意差距较大的情况时常发生。垂直搜索由于只包含某个领域的信息,词义明确,可以提高结果的相关性。23现代搜索引擎的主要技术231倒排索引技术在关系数据库系统里,索引1是检索数据最有效率的方式。但对于搜索引擎,它并不能满足其特殊要求1)海量数据搜索引擎面对的是海量数据,像GOOGLE,百度这样大型的商业搜索引擎索引都是亿级甚至几千亿的网页数量,面对如此海量数据,使得数据库系统很难有效的管理。2)数据操作简单搜索引擎使用的数据操作简单,一般而言,只需要增、删、改、查几个功能,而且数据都有特定的格式,可以针对这些应用设计出简单高效的应用程序。而一般的数据库系统则支持大而全的功能,同时损失了速度和空间。最后,搜索引擎面临大量的用户检索需求,这要求搜索引擎在检索程序的设计上要分秒必争,尽可能的将大运算量的工作在索引建立时完成,使检索运算尽量的少。一般的数据库系统很难承受如此大量的用户请求,而且在检索响应时间和检索并发度上都不及我们专门设计的索引系统。倒排索引,也常被称为反向索引、置入档案或反向档案,是一种索引方法,被用来存储在全文搜索下某个单词在一个文档或者一组文档中的存储位置的映射。它是文档检索系统中最常用的数据结构。通过倒排索引,可以根据单词快速获取包含这个单词的文档列表。倒排索引主要由两个部分组成“单词词典”和“倒排文件”。倒排索引有两种不同的反向索引形式一条记录的水平反向索引(或者反向档案索引)包含每个引用单词的文档的列表。一个单词的水平反向索引(或者完全反向索引)又包含每个单词在一个文档中的位置。后者的形式提供了更多的兼容性(比如短语搜索),但是需要更多的时间和空间来创建。现代搜索引擎的索引都是基于倒排索引。相比“签名文件”、“后缀树”等索引结构,“倒排索引”是实现单词到文档映射关系的最佳实现方式和最有效的索引结构232分布式技术分布式搜索引擎是根据地域、主题、IP地址及其它的划分标准将全网分成若干个自治区域,在每个自治区域内设立一个检索服务器,而每个检索服务器由信息搜索机器人、索引搜索软件数据库和代理三部分组成。信息搜索机器人负责本自治区域内的信息搜索,并建立索引信息存入索引数据库。代理负责向用户提供查询接口,并与其它代理进行互换,实现检索服务器之间的信息交换,且查询可以重定向,即如果一个索引数据库没有满足查询要求,它可以将查询请求发送到其它检索服务器上。它与集中式搜索引擎相比有以下优点各检索服务器之间相互共享资源,站点只向本自治区域内的信息搜索机器人提供信息,减轻了网络及各站点的负载。各代理之间的相互协作及查询重定向使得提供的服务更完善。与WEB本身的分布式特性相适应,具有良好的可扩充性,便于维护。索引信息划分到各自的索引数据库中,使得各索引数据库相对较小,查询的响应时间相对较短。部分检索服务器发生故障时,其它部分能正常工作。24小结本章介绍了搜索引擎的发展历程,并讨论了未来搜索引擎的形态。然后重点阐述了现代网络搜索引擎的主要组成结构。网络机器人利用搜索策略和算法获取网页。网页分析器对网页进行正文提取、分词等加工操作,分析和处理,生成可以被索引的标准文档。网页索引器生成对文档的倒排索引。网页搜索器分析用户输入的关键词,在索引库中检索,按照一定的算法将检索结果排序后呈现给用户。最后,介绍了现代搜索引擎的两个主要技术倒排索引和分布式技术。3开发平台和技术本章主要介绍了搜索引擎系统的开发平台以及使用的技术。31JAVA编程语言JAVA是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由SUNMICROSYSTEMS公司于1995年5月推出的JAVA程序设计语言和JAVA平台(即JAVAEE,JAVAME,JAVASE)的总称。JAVA自面世后就非常流行,发展迅速,对C语言形成了有力冲击。JAVA技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人PC、数据中心、游戏控制台、科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。在全球云计算和移动互联网的产业环境下,JAVA更具备了显著优势和广阔前景。JAVA语言具有如下特点1简单JAVA最初是为对家用电器进行集成控制而设计的一种语言,因此它必须简单明了。JAVA语言的简单性主要体现在以下三个方面1JAVA的风格类似于C,因而C程序员是非常熟悉的。从某种意义上讲,JAVA语言是C及C语言的一个变种,因此,C程序员可以很快就掌握JAVA编程技术。2JAVA摒弃了C中容易引发程序错误的地方,如指针和内存管理。3JAVA提供了丰富的类库。2面向对象面向对象可以说是JAVA最重要的特性。JAVA语言的设计完全是面向对象的,它不支持类似C语言那样的面向过程的程序设计技术。JAVA支持静态和动态风格的代码继承及重用。单从面向对象的特性来看,JAVA类似于SMALLTALK,但其它特性、尤其是适用于分布式计算环境的特性远远超越了SMALLTALK。3分布式JAVA包括一个支持HTTP和FTP等基于TCP/IP协议的子库。因此,JAVA应用程序可凭借URL打开并访问网络上的对象,其访问方式与访问本地文件系统几乎完全相同。为分布环境尤其是INTERNET提供的动态内容无疑是一项非常宏伟的任务,但JAVA的语法特性却使我们很容易地实现这项目标。4健壮JAVA致力于检查程序在编译和运行时的错误。类型检查帮助检查出许多开发早期出现的错误。JAVA自已操纵内存减少了内存出错的可能性。JAVA还实现了真数组,避免了覆盖数据的可能。这些功能特征大大缩短了开发JAVA应用程序的周期。JAVA提供NULL指针检测数组边界检测异常出口字节代码校验。5结构中立另外,为了建立JAVA作为网络的一个整体,JAVA将它的程序编译成一种结构中立的中间文件格式。只要有JAVA运行系统的机器都能执行这种中间代码。现在,JAVA运行系统有SOLARIS24SPARC,WIN32系统WINDOWS95和WINDOWSNT等JAVA源程序被编译成一种高层次的与机器无关的BYTECODE格式语言,这种语言被设计在虚拟机上运行,由机器相关的运行调试器实现执行。6安全JAVA的安全性可从两个方面得到保证。一方面,在JAVA语言里,象指针和释放内存等C功能被删除,避免了非法内存操作。另一方面,当JAVA用来创建浏览器时,语言功能和浏览器本身提供的功能结合起来,使它更安全。JAVA语言在你的机器上执行前,要经过很多次的测试。它经过代码校验,检查代码段的格式,检测指针操作,对象操作是否过分以及试图改变一个对象的类型。7可移植的这句话一直是JAVA程序设计师们的精神指标,也是JAVA之所以能够受到程序设计师们喜爱的原因之一,最大的功臣就是JVM的技术。大多数编译器产生的目标代码只能运行在一种CPU上如INTEL的X86系列,即使那些能支持多种CPU的编译器也不能同时产生适合多种CPU的目标代码。如果你需要在三种CPU如X86、SPARC和MIPS上运行同一程序,就必须编译三次。但JAVA编译器就不同了。JAVA编译器产生的目标代码JCODE是针对一种并不存在的CPUJAVA虚拟机JAVAVIRTUALMACHINE,而不是某一实际的CPU。JAVA虚拟机能掩盖不同CPU之间的差别,使JCODE能运行于任何具有JAVA虚拟机的机器上。32MYECLIPSEMYECLIPSE企业级工作平台(MYECLIPSEENTERPRISEWORKBENCH,简称MYECLIPSE)是对ECLIPSEIDE的扩展,利用它我们可以在数据库和JAVAEE的开发、发布以及应用程序服务器的整合方面极大的提高工作效率。它是功能丰富的JAVAEE集成开发环境,包括了完备的编码、调试、测试和发布功能,完整支持HTML,STRUTS,JSP,CSS,JAVASCRIPT,SPRING,SQL,HIBERNATE。MYECLIPSE是一个十分优秀的用于开发JAVA,J2EE的ECLIPSE插件集合,MYECLIPSE的功能非常强大,支持也十分广泛,尤其是对各种开源产品的支持十分不错。MYECLIPSE目前支持JAVASERVLET,AJAX,JSP,JSF,STRUTS,SPRING,HIBERNATE,EJB3,JDBC数据库链接工具等多项功能。可以说MYECLIPSE是几乎囊括了目前所有主流开源产品的专属ECLIPSE开发工具。33TOMCATTOMCAT是由APACHE软件基金会下属的JAKARTA项目开发的一个SERVLET容器,按照SUNMICROSYSTEMS提供的技术规范,实现了对SERVLET和JAVASERVERPAGE(JSP)的支持,并提供了作为WEB服务器的一些特有功能,如TOMCAT管理和控制平台、安全局管理和TOMCAT阀等。由于TOMCAT本身也内含了一个HTTP服务器,它也可以被视作一个单独的WEB服务器。但是,不能将TOMCAT和APACHEWEB服务器混淆,APACHEWEBSERVER是一个用C语言实现的HTTPWEBSERVER;这两个HTTPWEBSERVER不是捆绑在一起的。APACHETOMCAT包含了一个配置管理工具,也可以通过编辑XML格式的配置文件来进行配置。TOMCAT提供了一个JASPER编译器用以将JSP编译成对应的SERVLET。TOMCAT的SERVLET引擎通常与APACHE或者其他WEB服务器一起工作。除了用于开发过程中的调试以及那些对速度和事务处理只有很小要求的用户,很少会将TOMCAT单独作为WEB服务器。但随着版本的更新,正有越来越多的用户将其单独作为WEB服务器用以那些对速度和可靠性有较高要求的环境中。34LUCENE341什么是LUCENEAPACHELUCENE是一个基于JAVA全文搜索引擎,利用它可以轻易地为JAVA软件加入全文搜寻功能。LUCENE是一个基于JAVA的全文信息检索工具包,它不是一个完整的搜索应用程序,而是为你的应用程序提供索引和搜索功能。可以方便的嵌入到各种应用中实现针对应用的全文索引/检索功能。因此它并不像WWWBAIDUCOM或者GOOGLEDESKTOP那么拿来就能用,它只是提供了一种工具让你能实现这些产品。LUCENE目前是APACHEJAKARTA家族中的一个开源项目。也是目前最为流行的基于JAVA开源全文检索工具包。目前已经有很多应用程序的搜索功能是基于LUCENE的,比如ECLIPSE的帮助系统的搜索功能。LUCENE能够为文本类型的数据建立索引,所以你只要能把你要索引的数据格式转化为文本的,LUCENE就能对你的文档进行索引和搜索。比如你要对一些HTML文档,PDF文档进行索引的话你就首先需要把HTML文档和PDF文档转化成文本格式的,然后将转化后的内容交给LUCENE进行索引,然后把创建好的索引文件保存到磁盘或者内存中,最后根据用户输入的查询条件在索引文件上进行查询。不指定要索引的文档的格式也使LUCENE能够几乎适用于所有的搜索应用程序。LUCENE的最主要工作是替文件的每一个字作索引,索引让搜寻的效率比传统的逐字比较大大提高,LUCEN提供一组解读,过滤,分析文件,编排和使用索引的API,它的强大之处除了高效和简单外,最重要的是使使用者可以随时应自已需要自订其功能。342索引和搜索索引是现代搜索引擎的核心,建立索引的过程就是把源数据处理成非常方便查询的索引文件的过程。为什么索引这么重要呢,试想你现在要在大量的文档中搜索含有某个关键词的文档,那么如果不建立索引的话你就需要把这些文档顺序的读入内存,然后检查这个文章中是不是含有要查找的关键词,这样的话就会耗费非常多的时间,想想搜索引擎可是在毫秒级的时间内查找出要搜索的结果的。这就是由于建立了索引的原因,你可以把索引想象成这样一种数据结构,他能够使你快速的随机访问存储在索引中的关键词,进而找到该关键词所关联的文档。LUCENE采用的是一种称为反向索引(INVERTEDINDEX)的机制。反向索引就是说我们维护了一个词/短语表,对于这个表中的每个词/短语,都有一个链表描述了有哪些文档包含了这个词/短语。这样在用户输入查询条件的时候,就能非常快的得到搜索结果。我们将在本系列文章的第二部分详细介绍LUCENE的索引机制,由于LUCENE提供了简单易用的API,所以即使读者刚开始对全文本进行索引的机制并不太了解,也可以非常容易的使用LUCENE对你的文档实现索引。对文档建立好索引后,就可以在这些索引上面进行搜索了。搜索引擎首先会对搜索的关键词进行解析,然后再在建立好的索引上面进行查找,最终返回和用户输入的关键词相关联的文档。343LUCENE能做什么要回答这个问题,先要了解LUCENE的本质。实际上LUCENE的功能很单一,说到底,就是你给它若干个字符串,然后它为你提供一个全文搜索服务,告诉你你要搜索的关键词出现在哪里。知道了这个本质,你就可以发挥想象做任何符合这个条件的事情了。你可以把站内新闻都索引了,做个资料库;你可以把一个数据库表的若干个字段索引起来,那就不用再担心因为“LIKE”而锁表了;你也可以写个自己的搜索引擎。344LUCENE的工作方式LUCENE提供的服务实际包含两部分一入一出。所谓入是写入,即将你提供的源(本质是字符串)写入索引或者将其从索引中删除;所谓出是读出,即向用户提供全文搜索服务,让用户可以通过关键词定位源。写入流程源字符串首先经过ANALYZER处理,包括分词,分成一个个单词;去除STOPWORD(可选)。将源中需要的信息加入DOCUMENT的各个FIELD中,并把需要索引的FIELD索引起来,把需要存储的FIELD存储起来。将索引写入存储器,存储器可以是内存或磁盘。读出流程用户提供搜索关键词,经过ANALYZER处理。对处理后的关键词搜索索引找出对应的DOCUMENT。用户根据需要从找到的DOCUMENT中提取需要的FIELD原文或者源URL。35SPRINGSPRINGFRAMEWORK是一个开源的JAVAJAVAEE全功能栈(FULLSTACK)的应用程序框架,以APACHE许可证形式发布,也有NET平台上的移植版本。该框架基于EXPERTONEONONEJAVAEEDESIGNANDDEVELOPMENT(ISBN0764543857)一书中的代码,最初由RODJOHNSON和JUERGENHOELLER等开发。SPRINGFRAMEWORK提供了一个简易的开发方式,这种开发方式,将避免那些可能致使底层代码变得繁杂混乱的大量的属性文件和帮助类。SPRING中包含的关键特性强大的基于JAVABEANS的采用控制翻转(INVERSIONOFCONTROL,IOC)原则的配置管理,使得应用程序的组建更加快捷简易。一个可用于从APPLET到JAVAEE等不同运行环境的核心BEAN工厂。数据库事务的一般化抽象层,允许声明式(DECLARATIVE)事务管理器,简化事务的划分使之与底层无关。内建的针对JTA和单个JDBC数据源的一般化策略,使SPRING的事务支持不要求JAVAEE环境,这与一般的JTA或者EJBCMT相反。JDBC抽象层提供了有针对性的异常等级(不再从SQL异常中提取原始代码),简化了错误处理,大大减少了程序员的编码量。再次利用JDBC时,你无需再写出另一个终止(FINALLY)模块。并且面向JDBC的异常与SPRING通用数据访问对象(DATAACCESSOBJECT)异常等级相一致。以资源容器,DAO实现和事务策略等形式与HIBERNATE,JDO和IBATISSQLMAPS集成。利用众多的翻转控制方便特性来全面支持,解决了许多典型的HIBERNATE集成问题。所有这些全部遵从SPRING通用事务处理和通用数据访问对象异常等级规范。灵活的基于核心SPRING功能的MVC网页应用程序框架。开发者通过策略接口将拥有对该框架的高度控制,因而该框架将适应于多种呈现(VIEW)技术,例如JSP、FREEMARKER、VELOCITY、TILES、ITEXT以及POI。值得注意的是,SPRING中间层可以轻易地结合于任何基于MVC框架的网页层,例如STRUTS、WEBWORK或TAPESTRY。提供诸如事务管理等服务的面向方面编程框架。在设计应用程序MODEL时,MVC模式(例如STRUTS)通常难于给出一个简洁明了的框架结构。SPRING却具有能够让这部分工作变得简单的能力。程序开发员们可以使用SPRING的JDBC抽象层重新设计那些复杂的框架结构。36STRUTS2APACHESTRUTS2是一个用于开发JAVAEE网络应用程序的开源WEB应用框架。它利用并扩展了JAVASERVLETAPI,鼓励开发者采用MVC架构。STRUTS2是STRUTS的下一代产品,是在STRUTS1和WEBWORK的技术基础上进行了合并的全新的STRUTS2框架。其全新的STRUTS2的体系结构与STRUTS1的体系结构差别巨大。STRUTS2以WEBWORK为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与SERVLETAPI完全脱离开,所以STRUTS2可以理解为WEBWORK的更新产品。虽然从STRUTS1到STRUTS2有着太大的变化,但是相对于WEBWORK,STRUTS2的变化很小。当WEB容器收到请求(HTTPSERVLETREQUEST)它将请求传递给一个标准的的过滤链包括(ACTIONCONTEXTCLEANUP)过滤器,然后经过OTHERFILTERSSITEMESH,ETC。接下来需要调用FILTERDISPATCHER核心控制器,然后它调用ACTIONMAPPER确定请求那个ACTION,ACTIONMAPPER返回一个收集ACTION详细信息的ACTIONMAPING对象。接下来FILTERDISPATCHER将控制权委派给ACTIONPROXY,ACTIONPROXY调用配置管理器CONFIGURATIONMANAGER从配置文件中读取配置信息STRUTSXML,然后创建ACTIONINVOCATION对象,ACTIONINVOCATION在调用ACTION之前会依次的调用所用配置拦截器(INTERCEPTORN)一旦执行结果返回结果字符串ACTIONINVOCATION负责查找结果字符串对应的RESULT)然后执行这个RESULTRESULT会调用一些模版(JSP)来呈现页面,之后拦截器INTERCEPTORN会在被执行顺序和ACTION执行之前相反最后响应HTTPSERVLETRESPONSE被返回在WEBXML中配置的那些过滤器和(核心控制器)(FILTERDISPATCHER)。37MYBATISMYBATIS是一个JAVA持久化框架,它通过XML描述符或注解把对象与存储过程或SQL语句关联起来。与其他的对象关系映射框架不同,MYBATIS并没有将JAVA对象与数据库表关联起来,而是将JAVA方法与SQL语句关联。MYBATIS允许用户充分利用数据库的各种功能,例如存储过程、视图、各种复杂的查询以及某数据库的专有特性。如果要对遗留数据库、不规范的数据库进行操作,或者要完全控制SQL的执行,MYBATIS是一个不错的选择。与JDBC相比,MYBATIS简化了相关代码SQL语句在一行代码中就能执行。MYBATIS提供了一个映射引擎,声明式的把SQL语句执行结果与对象树映射起来。通过使用一种内建的类XML表达式语言,或者使用APACHEVELOCITY集成的插件,SQL语句可以被动态的生成。MYBATIS与SPRINGFRAMEWORK和GOOGLEGUICE集成,这使开发者免于依赖性问题。MYBATIS支持声明式数据缓存(DECLARATIVEDATACACHING)。当一条SQL语句被标记为“可缓存”后,首次执行它时从数据库取得的所有数据会被存储在一段高速缓存中,今后执行这条语句时就会从高速缓存中读取结果,而不是再次命中数据库。MYBATIS提供了默认下基于JAVAHASHMAP的缓存实现,以及用于与OSCACHE、EHCACHE、HAZELCAST和MEMCACHED连接的默认连接器。MYBATIS还提供API供其他缓存实现使用。4搜索引擎的总体设计在前面章节中对搜索引擎的技术的研究和探讨基础上,从本章开始将逐步实现一个自己的具有爬虫、索引器、搜索器等功能的完整搜索引擎。本章描述了搜索引擎实现的需求分析、概要设计等内容,为后面的具体功能实现打下基础。41系统概述搜索引擎是根据用户的查询请求,按照一定算法从索引数据中查找信息返回给用户。为了保证用户查找信息的精度和新鲜度,搜索引擎需要建立并维护一个庞大的索引数据库。一般的搜索引擎由网络机器人程序、索引与搜索程序、索引数据库等部分组成。虽然在大多数的实际应用场合中,搜索引擎这样的系统的运行过程中通常伴随着超高并发、超大数据量,对性能会有苛刻的要求,所以通常使用C/C语言开发。但在本程序中,为了探索搜索引擎的主要技术,为了效率更高,节约时间和成本,所以使用JAVA语言进行开发,并引入了LUCENE框架的支持。42系统需求从功能上看,搜索引擎需要在后台下载和分析网页、建立索引,用户在系统提供的图形界面中输入关键词并得到搜索结果,由此我们得到了本系统的用例图,如图41所示。系统下载网页处理网页建立索引用户搜索图41用例图43系统结构由系统需求可以看出,系统的组成部分必不可少的有网络机器人网页分析程序网页索引程序网页搜索程序搜索程序客户端通过以上的分析可以确立系统的基本框架。首先,需要实现的是一个BS结构的JSP动态WEB程序。程序使用SPRING作为类依赖管理器,使程序功能具有更好的独立性。使用STRUTS2作为MVC框架,使程序结构清晰。MYBATIS做ORM(对象关系映射),简化数据库操作。LUCENE框架提供对索引功能的基本支持。系统结构如图42所示。WWW文档网络机器人程序建立LUCENE索引从数据库中搜索信息TOMCAT服务器LUCENE索引数据库WWW浏览器WWW浏览器JSP网络机器人程序图42程序结构图44小结本章中我们分析了搜索引擎实现的系统需求,确立了系统结构,接下的章节将讲述系统各部分的具体实现。5网络机器人的实现51什么是网络机器人又称为网络爬虫,网络蜘蛛等。在搜索引擎系统中扮演搜集器的角色。它通常是一个计算机程序,在需要时运行。网络机器人通过统一资源定位符(URL)来访问网络资源。它会从一个入口URL列表开始,通过一定的算法顺序,下载并通过网页分析器分析网页,从网页中发现新的URL地址,并将新发现的URL添加到待访问的URL列表中。网络爬虫将得到的网页保存在本地网页库中,以备网页分析器和索引器进行处理和使用。52网络机器人结构分析在搜索引擎实现中,网络机器人和网页分析器通常协同工作,关系紧密。在获得网页后直接对其分析,去掉不必要的内容,从而减少了磁盘空间的浪费。所以这里将网络机器人的实现和网页分析器的实现放在一起进行说明。521如何解析HTML把URL加入等待队列SPIDER程序工作完成等待队列中是否有URL否下载从等待队列中得到的网页,并将他送入运行队列中。是这个网页包含其他超级连接吗将这一网页送入完成队列并继续查看网页上的下一个超连接是否为指向WEB的连接报告其他类型连接连接是否与网页所在主机不同且只处理本地连接报告外部连接报告网页连接将连接加入等候队列否是否是否是图51网页处理流程522工作流程发现URL等待队列运行队列完成队列错误队列完成URL图52网络机器人工作流程53网络机器人的实现531实现说明网络机器人通常作为本地程序,运行于专用计算机上。并且为了提高性能,通常用C/C语言编写。在这里为了提高开发效率,说明网络机器人的基本实现方法,所以使用JAVA语言编写代码。JAVA编程语言是个简单、面向对象、分布式、解释性、健壮、安全与系统无关、可移植、高性能、多线程和动态的语言。具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人PC、数据中心、游戏控制台、科学超级计算机、移动电话和互联网。在全球云计算和移动互联网的产业环境下,JAVA更具备了显著优势和广阔前景。在这里使用JAVA语言,主要是为了提高开发效率。532HTML页面结构HTML表示超文本标记语言(HYPERTEXTMARKUPLANGUAGE)。是基于标准通用标记语言SGML的一个庞大的文档处理系统SGML的基本思想是采用描述标记TAG来提供描述文档结构的附加信息HTML利用SGML定义了一些标记,如、等,用于描述文本的显示方式,并对这些标记的使用都做了格式定义,对于实体符号的显示和标记元素的结构也做了规范,使得HTML网页在文本格式和结构上存在一定的规律,也为网页信息的提取提供了方便HTML文件是一个包含标记的文本文件。这些标记保速浏览器怎样显示这个页面。HTML文件必须有HTM或者HTML扩展名。HTML文件可以用一个简单的文本编辑器创建。HTML是网络的通用语言,一种简单、通用的全置标记语言。它允许网页制作人建立文本与图片相结合的复杂页面,这些页面可以被网上任何其他人浏览到,无论使用的是什么类型的电脑或浏览器。HTML由一系列相互嵌套的标签组成,一个标签由开始标签开始,到结束标签结束。完整HTML包括HTMLDOCTYPE声明、标题、HEAD、网页编码声明等内容网页标题WWWBAIDUCOM网页正文内容从上面的代码中可以看到,“TITLE”标签中包含了网页的标题,“BODY”标签中包含着网页正文。所以下载到网页之后,需要提取“TITLE”标签中的内容存入数据库中的文章标题字段,将BODY中的内容去掉其他标签之后,放入数据库中的文章正文字段。533代码分析有了网络链接,可以通过流的形式读取网页内容,并保存问文本格式。实现方式如下面的代码所示/读取一个网页全部内容/PUBLICSTRINGGETONEHTMLFINALSTRINGHTMLURLTHROWSIOEXCEPTIONURLURLSTRINGTEMPFINALSTRINGBUFFERSBNEWSTRINGBUFFERURLNEWURLHTMLURLFINALBUFFEREDREADERINNEWBUFFEREDREADERNEWINPUTSTREAMREADERURLOPENSTREAM,“GBK“/读取网页全部内容WHILETEMPINREADLINENULLSBAPPENDTEMPINCLOSERETURNSBTOSTRING网页的链接存放在“A”标签中的“HREF”属性中,可以通过下面的代码得到/获得链接/PUBLICLISTGETLINKFINALSTRINGSSTRINGREGEXFINALLISTLISTNEWARRAYLISTREGEX“HREF“|S“FINALPATTERNPAPATTERNCOMPILEREGEX,PATTERNDOTALLFINALMATCHERMAPAMATCHERSWHILEMAFINDLISTADDMAGROUPRETURNLIST54内容处理下载得到的网页含有很多的无用信息,不能直接使用,需要进行处理。首先需要提取标题和正文,然后对正文内容进行分词处理。541正文提取网页可以分成两类一类是导航型网页,该网页主要是超链接导航信息,如各种门户网站;另一类是正文型网页,是指包含有主题内容的网页。本文只对正文型网页进行处理,因为导航型网页含有大量的超链接,很容易被处
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 设备维护缺陷管理制度
- 设施设备校准管理制度
- 设计团队文件管理制度
- 设计院大客户管理制度
- 诊所人员体诊管理制度
- 诊所消毒服务管理制度
- 诊疗项目审批管理制度
- 财务管理授权管理制度
- 货品库存资金管理制度
- 货物配送公司管理制度
- 绿壳蛋鸡的养殖课件
- 江苏省金陵中学2023学年物理高一下期末调研试题(含答案解析)
- 2023年合肥城建发展股份有限公司校园招聘笔试模拟试题及答案解析
- DB11-T1834-2021 城市道路工程施工技术规程高清最新版
- 广东省珠海市2022-2023高一物理下学期期末学业质量检测试题
- 小学语文扩句、缩句专题
- PDCA降低I类切口感染发生率
- 人类能源史课件
- 农村公路安全生命防护工程施工方案
- 科技社团活动记录2017年秋
- 抗滑桩专项的施工组织方案[专家评审]
评论
0/150
提交评论