1、第 1 页 共 28 页目录目录 .1摘要 .3第一章 引言 .4第二章 搜索引擎的结构 .52.1 系统概述 .52.2 搜索引擎的构成 .52.2.1 网络机器人 .52.2.2 索引与搜索 .52.2.3 Web 服务器 .62.3 搜索引擎的主要指标及分析 .62.4 小节 .6第三章 网络机器人 .73.1 什么是网络机器人 .73.2 网络机器人的结构分析 .73.2.1 如何解析 HTML .73.2.2 Spider 程序结构 .83.2.3 如何构造 Spider 程序 .93.2.4 如何提高程序性能 .113.2.5 网络机器人的代码分析 .123.3 小节 .14第四章
2、 基于 LUCENE 的索引与搜索 .154.1 什么是 LUCENE 全文检索 .154.2 LUCENE 的原理分析 .154.2.1 全文检索的实现机制 .154.2.2 Lucene 的索引效率 .154.2.3 中文切分词机制 .17第 2 页 共 28 页4.3 LUCENE 与 SPIDER 的结合 .184.4 小节 .21第五章 基于 TOMCAT 的 WEB 服务器 .225.1 什么是基于 TOMCAT 的 WEB 服务器 .225.2 用户接口设计 .225.3.1 客户端设计 .225.3.2 服务端设计 .235.3 在 TOMCAT 上部署项目 .255.4 小节
3、 .25第六章 搜索引擎策略 .266.1 简介 .266.2 面向主题的搜索策略 .266.2.1 导向词 .266.2.3 权威网页和中心网页 .276.3 小节 .27参考文献 .28第 3 页 共 28 页摘要网络中的资源非常丰富,但是如何有效的搜索信息却是一件困难的事情。建立搜索引擎就是解决这个问题的最好方法。本文首先详细介绍了基于英特网的搜索引擎的系统结构,然后从网络机器人、索引引擎、Web 服务器三个方面进行详细的说明。为了更加深刻的理解这种技术,本人还亲自实现了一个自己的搜索引擎新闻搜索引擎。新闻搜索引擎是从指定的 Web 页面中按照超连接进行解析、搜索,并把搜索到的每条新闻进
4、行索引后加入数据库。然后通过 Web 服务器接受客户端请求后从索引数据库中搜索出所匹配的新闻。本人在介绍搜索引擎的章节中除了详细的阐述技术核心外还结合了新闻搜索引擎的实现代码来说明,图文并茂、易于理解。AbstractThe resources in the internet are abundant, but it is a difficult job to search some useful information. So a search engine is the best method to solve this problem. This article fist introdu
5、ces the system structure of search engine based on the internet in detail, then gives a minute explanation form Spider search, engine and web server. 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 a
6、ccording to hyperlink from a appointed web page, then indexs every searched information and adds it to the index database. Then after receiving the customers requests from the web server, it soon searchs the right news form the index engine,In the chapter of introducing search engine, it is not only
7、 elaborate the core technology, but also combine with the modern code,pictures included, easy to understand.第 4 页 共 28 页第一章 引言面对浩瀚的网络资源,搜索引擎为所有网上冲浪的用户提供了一个入口,毫不夸张的说,所有的用户都可以从搜索出发到达自己想去的网上任何一个地方。因此它也成为除了电子邮件以外最多人使用的网上服务。搜索引擎技术伴随着 WWW 的发展是引人注目的。搜索引擎大约经历了三代的更新发展:第一代搜索引擎出现于 1994 年。这类搜索引擎一般都索引少于 1,000,00
8、0 个网页,极少重新搜集网页并去刷新索引。而且其检索速度非常慢,一般都要等待 10 秒甚至更长的时间。在实现技术上也基本沿用较为成熟的 IR(Information Retrieval) 、网络、数据库等技术,相当于利用一些已有技术实现的一个 WWW 上的应用。在 1994 年 3 月到 4 月,网络爬虫 World Web Worm (WWWW)平均每天承受大约 1500 次查询。大约在 1996 年出现的第二代搜索引擎系统大多采用分布式方案(多个微型计算机协同工作)来提高数据规模、响应速度和用户数量,它们一般都保持一个大约 50,000,000 网页的索引数据库,每天能够响应 10,000
9、,000 次用户检索请求。1997 年 11 月,当时最先进的几个搜索引擎号称能建立从 2,000,000 到 100,000,000 的网页索引。Altavista 搜索引擎声称他们每天大概要承受 20,000,000 次查询。2000 年搜索引擎 2000 年大会上,按照 Google 公司总裁 Larry Page 的演讲,Google 正在用 3,000 台运行 Linux 系统的个人电脑在搜集 Web 上的网页,而且以每天 30 台的速度向这个微机集群里添加电脑,以保持与网络的发展相同步。每台微机运行多个爬虫程序搜集网页的峰值速度是每秒 100 个网页,平均速度是每秒 48.5 个网
10、页,一天可以搜集超过4,000,000 网页搜索引擎一词在国内外因特网领域被广泛使用,然而他的含义却不尽相同。在美国搜索引擎通常指的是基于因特网的搜索引擎,他们通过网络机器人程序收集上千万到几亿个网页,并且每一个词都被搜索引擎索引,也就是我们说的全文检索。著名的因特网搜索引擎包括 First Search、Google、HotBot 等。在中国,搜索引擎通常指基于网站目录的搜索服务或是特定网站的搜索服务,本人这里研究的是基于因特网的搜索技术。第 5 页 共 28 页第二章 搜索引擎的结构2.1 系统概述搜索引擎是根据用户的查询请求,按照一定算法从索引数据中查找信息返回给用户。为了保证用户查找信
11、息的精度和新鲜度,搜索引擎需要建立并维护一个庞大的索引数据库。一般的搜索引擎由网络机器人程序、索引与搜索程序、索引数据库等部分组成。系统结构图2.2 搜索引擎的构成2.2.1 网络机器人网络机器人也称为“网络蜘蛛”(Spider),是一个功能很强的 WEB 扫描程序。它可以在扫描 WEB 页面的同时检索其内的超链接并加入扫描队列等待以后扫描。因为 WEB 中广泛使用超链接,所以一个 Spider 程序理论上可以访问整个 WEB 页面。为了保证网络机器人遍历信息的广度和深度需要设定一些重要的链接并制定相关的扫描策略。2.2.2 索引与搜索网络机器人将遍历得到的页面存放在临时数据库中,如果通过 S
12、QL 直接查询信息速度将会难以忍受。为了提高检索效率,需要建立索引,按照倒排文件的格式存放。如果索引不及时跟新的话,用户用搜索引擎也不能检索到。用户输入搜索条件后搜索程序将通过索引数据库进行检索然后把符合查询要求的数据WWW文档网络机器人程序建立 Lucene 索引从数据库中搜索信息Tomcat 服务器Lucene 索引数据库WWW 浏览器WWW 浏览器JSP网络机器人程序第 6 页 共 28 页库按照一定的策略进行分级排列并且返回给用户。2.2.3 Web 服务器 客户一般通过浏览器进行查询,这就需要系统提供 Web 服务器并且与索引数据库进行连接。客户在浏览器中输入查询条件,Web 服务器
13、接收到客户的查询条件后在索引数据库中进行查询、排列然后返回给客户端。2.3 搜索引擎的主要指标及分析搜索引擎的主要指标有响应时间、召回率、准确率、相关度等。这些指标决定了搜索引擎的技术指标。搜索引擎的技术指标决定了搜索引擎的评价指标。好的搜索引擎应该是具有较快的反应速度和高召回率、准确率的,当然这些都需要搜索引擎技术指标来保障。召回率:一次搜索结果中符合用户要求的数目与用户查询相关信息的总数之比准确率:一次搜索结果中符合用户要求的数目与该次搜索结果总数之比相关度:用户查询与搜索结果之间相似度的一种度量精确度:对搜索结果的排序分级能力和对垃圾网页的抗干扰能力2.4 小节以上对基于因特网的搜索引擎
14、结构和性能指标进行了分析,本人在这些研究的基础上利用 JavaTM 技术和一些 Open Source 工具实现了一个简单的搜索引擎新闻搜索引擎。在接下来的几章里将会就本人的设计进行详细的分析。第 7 页 共 28 页第三章 网络机器人3.1 什么是网络机器人网络机器人又称为 Spider 程序,是一种专业的 Bot 程序。用于查找大量的 Web 页面。它从一个简单的 Web 页面上开始执行,然后通过其超链接在访问其他页面,如此反复理论上可以扫描互联网上的所有页面。基于因特网的搜索引擎是 Spider 的最早应用。例如搜索巨头 Google 公司,就利用网络机器人程序来遍历 Web 站点,以创
15、建并维护这些大型数据库。网络机器人还可以通过扫描 Web 站点的主页来得到这个站点的文件清单和层次机构。还可以扫描出中断的超链接和拼写错误等。3.2 网络机器人的结构分析Internet 是建立在很多相关协议基础上的,而更复杂的协议又建立在系统层协议之上。Web 就是建立在 HTTP ( Hypertext Transfer Protocol ) 协议基础上,而 HTTP 又是建立在TCP/IP ( Transmission Control Protocol / Internet Protocol ) 协议之上,它同时也是一种Socket 协议。所以网络机器人本质上是一种基于 Socket 的
16、网络程序。3.2.1 如何解析 HTML因为 Web 中的信息都是建立在 HTML 协议之上的,所以网络机器人在检索网页时的第一个问题就是如何解析 HTML。在解决如何解析之前,先来介绍下 HTML 中的几种数据。文本:除了脚本和标签之外的所有数据注释:程序员留下的说明文字,对用户是不可见的简单标签:由单个表示的 HTML 标签开始标签和结束标签:用来控制所包含的 HTML 代码我们在进行解析的时候不用关心所有的标签,只需要对其中几种重要的进行解析即可。超连接标签超连接定义了 WWW 通过 Internet 链接文档的功能。他们的主要目的是使用户能够任意迁移到新的页面,这正是网络机器人最关心的
17、标签。图像映射标签第 8 页 共 28 页图像映射是另一种非常重要的标签。它可以让用户通过点击图片来迁移到新的页面中。表单标签表单是 Web 页面中可以输入数据的单元。许多站点让用户填写数据然后通过点击按钮来提交内容,这就是表单的典型应用。表格标签表格是 HTML 的构成部分,通常用来格式化存放、显示数据。我们在具体解析这些 HTMl 标签有两种方法:通过 JavaTM 中的 Swing 类来解析或者通过 Bot 包中的 HTMLPage 类来解析,本人在实际编程中采用后者。Bot 包中的 HTMLPage 类用来从指定 URL 中读取数据并检索出有用的信息。下面给出该类几种重要的方法。HTM
18、LPage 构造函数 构造对象并指定用于通讯的 HTTP 对象Public HTMLPage(HTTP http)GetForms 方法 获取最后一次调用 Open 方法检索到的表单清单Public Vector getForms()GetHTTP 方法 获取发送给构造函数的 HTTP 对象Public HTTP getHTTP()GetImage 方法 获取指定页面的图片清单Public Vector getImage()GetLinks 方法 获取指定页面的连接清单Public Vector getLinks()Open 方法 打开一个页面并读入该页面,若指定了回调对象则给出所有该对象数据
19、Public void open(String url,HTMLEditorKit.ParserCallback a)3.2.2 Spider 程序结构网络机器人必须从一个网页迁移到另一个网页,所以必须找到该页面上的超连接。程序首先解析网页的 HTML 代码,查找该页面内的超连接然后通过递归和非递归两种结构来实现 Spider 程序。递归结构递归是在一个方法中调用自己本身的程序设计技术。虽然比较容易实现但耗费内存且不能第 9 页 共 28 页使用多线程技术,故不适合大型项目。非递归结构这种方法使用队列的数据结构,当 Spider 程序发现超连接后并不调用自己本身而是把超连接加入到等待队列中。当
20、 Spider 程序扫描完当前页面后会根据制定的策略访问队列中的下一个超连接地址。虽然这里只描述了一个队列,但在实际编程中用到了四个队列,他们每个队列都保存着同一处理状态的 URL。等待队列 在这个队列中,URL 等待被 Spider 程序处理。新发现的 URL 也被加入到这个队列中处理队列 当 Spider 程序开始处理时,他们被送到这个队列中错误队列 如果在解析网页时出错,URL 将被送到这里。该队列中的 URL 不能被移入其他队列中完成队列 如果解析网页没有出错,URL 将被送到这里。该队列中的 URL 不能被移入其它队列中在同一时间 URL 只能在一个队列中,我们把它称为 URL 的状
21、态。发现 URL 等待队列 运行队列完成队列错误队列完成 URL以上的图表示了队列的变化过程,在这个过程中,当一个 URL 被加入到等待队列中时Spider 程序就会开始运行。只要等待队列中有一个网页或 Spider 程序正在处理一个网页,程序就会继续他的工作。当等待队列为空并且当前没有任何网页时,Spider 程序就会停止它的工作。3.2.3 如何构造 Spider 程序在构造 Spider 程序之前我们先了解下程序的各个部分是如何共同工作的。以及如何对这个程序进行扩展。流程图如下所示:第 10 页 共 28 页把 URL 加入等待队列Spider 程序工作完成等待队列中是否有 URL?否下载从等待队列中得到的网页,并将他送入运行队列中。是这个网页包含其他超级连接吗?将这一网页送入完成队列并继续查看网页上的下一个超连接是否为指向Web 的连接?报告其他类型连接连接是否与网页所在主机不同且只处理本地连接?报告外部连接报告网页连接将连接加入等候队列否是否是否是