基于web搜索引擎的与实现.docx
- 文档编号:29109927
- 上传时间:2023-07-20
- 格式:DOCX
- 页数:30
- 大小:244.60KB
基于web搜索引擎的与实现.docx
《基于web搜索引擎的与实现.docx》由会员分享,可在线阅读,更多相关《基于web搜索引擎的与实现.docx(30页珍藏版)》请在冰豆网上搜索。
基于web搜索引擎的与实现
本科毕业论文(设计、创作)
题目:
基于Web搜索引擎的设计与实现
DesignandImplementationofWeb-basedsearchengine
学生姓名:
杨卫中学号:
0802115
所在院系:
信息与通信技术系专业:
电子信息工程
入学时间:
2008年9月
导师姓名:
雷迎科职称/学位:
博士
导师所在单位:
信息与通信技术系
完成时间:
2012年5月
安徽三联学院教务处制
摘要
网络中的资源非常丰富,但是如何有效的搜索信息却是一件困难的事情。
建立搜索引擎就是解决这个问题的最好方法。
本文首先详细介绍了基于英特网的搜索引擎的系统结构,然后从网络机器人、索引引擎、Web服务器三个方面进行详细的说明。
在次基础上设计并实现了一种快捷高效的新闻搜索引擎,该搜索引擎是从指定的Web页面中按照超连接进行解析、搜索,并把搜索到的每条新闻进行索引后加入数据库,然后通过Web服务器接受客户端请求后从索引数据库中搜索出所匹配的新闻。
关键词:
搜索引擎;网络机器人;索引引擎;Web服务器
Abstact
Thenetworkresourcesareveryrich,buthoweffectivesearchinformationisadifficultthing.Buildasearchengineisthebestwaytosolvetheproblem.ThispaperfirstintroducedtheInternetsearchenginebasedonthestructureofthesystem,andthenfromthenetworkrobots,indexingengine,theWebserverofthethreeaspectsofthedetailedinstructions.Basedonthetimedesignedandrealizedaquickandefficientnewssearchengine,thesearchenginefromtheWebpageinaccordancewithspecifiedintheconnectionforanalytical,search,andthesearchtoeverynewsindexingofaddtothedatabase.ThenthroughtheWebserveracceptclientrequestsfromdatabasesearchindexafterthenewsofthematch.
Keywords:
searchengine;Networkrobot;Indexingengine;Webserver
目录4
第一章绪论
1.1搜索引擎出现的背景及意义
网络的出现以及发展对于世界发展的意义是极其重要的,它让地球村的理念变成现实,信息的传输不再受到时间和空间的限制。
在没有搜索引擎的时代,用户希望寻找某方面的信息,就必须通过各种途径或者是网站之间的连接寻找,可以这样说,脱离了搜索引擎的网站,就像是信息海洋中的一个一个孤岛,用户必将面临巨大的搜索成本,同时必须付出大量的时间和精力。
搜索引擎的出现改变了上述的现象,它通过程序的自动搜寻并建立索引,将这些信息孤岛联系起来,形成了一张巨大的信息网,并且运用分布式计算的巨大力量,能够让用户从海量数据中摒除垃圾信息,获取想要的知识。
搜索引擎不仅仅是节省了用户的时间,通过挖掉搜寻成本这座墙,它让许许多多的不可能成为可能。
1.2搜索引擎的发展历史及趋势
搜索经历了三代的更新和发展:
第一代搜索引擎出现于1994年。
这类搜索引擎一般都索引少于1,000,000个网页,极少重新搜集网页并去刷新索引。
而且其检索速度非常慢,一般都要等待10秒甚至更长的时间。
第二代搜索出现在1996年。
这类搜索引擎系统大多采用分布式方案(多个微型计算机协同工作)来提高数据规模、响应速度和用户数量,它们一般都保持一个大约50,000,000网页的索引数据库,每天能够响应10,000,000次用户检索请求。
第三代搜索引擎年代的划分和主要特性至今没有统一的认识,不过至少可以肯定的是:
第三代搜索引擎是对第二代搜索引擎在搜索技术上的改进,主要增加了互动性和个性化等高级的技术,为用户使用搜索引擎获取信息获得更好的体验。
至于互动性的评价标准是什么,以及第三代搜索引擎到底比第二代搜索引擎增加了多少价值——尤其是为企业利用搜索引擎开展网络营销增加了哪些价值,目前并没有非常令人信服的研究结论。
这也就是目前所谓的第三代搜索引擎并没有表现出太多优势的原因之一。
现在,网络上有很多著名的搜索引擎,XX,google等等,XX从2005年诞生到现在成为全球最大的中文搜索引擎,可想而知,发展的速度是多么的快,人们对搜索引擎的的需求是多么的大,XX的日点击率我无法在找到确切的数字,但是我们可以计算一下,截至2008年底,中国网民规模达到2.98亿人,每个网民上网点击XX的次数应该不少于十次吧,像我们要在XX上找资料的网名点击率百次不止,所以XX的日点击率是多么惊人。
搜索引擎经过几年的发展和摸索,越来越贴近人们的需求,搜索引擎的技术也得到了很大的发展。
搜索引擎在将来的的发展趋势大概有以下几个方面:
1.提高对用户输入的理解
为了提高搜索引擎对用户检索提问的理解,就必须有一个好的检索提问语言,为了克服关键词检索和目录查询的缺点,现在已经出现了自然语言智能答询。
用户可以输入简单的疑问句,比如“howcankillvirusofcomputer?
”。
搜索引擎在对提问进行结构和内容的分析之后,或直接给出提问的答案,或引导用户从几个可选择的问题中进行再选择。
自然语言的优势在于,一是使网络交流更加人性化,二是使查询变得更加方便、直接、有效。
就以上面的例子来讲,如果用关键词查询,多半人会用“virus”这个词来检索,结果中必然会包括各类病毒的介绍、病毒是怎样产生的等等许多无效信息,而用“howcankillvirusofcomputer?
”,搜索引擎会将怎样杀病毒的信息提供给用户,提高了检索效率。
2.对检索的结果进行处理
对检索的结果处理,有以下几个方向:
其一,使用链接评价,就是将网页的链接数量算作网页评分因素之一,这样搜索的结果就更加的能够满足用户的要求,在这个方面google()的“链接评价体系”已经做出了相当出色的成绩。
其二,使用大众访问性,就是将访问数量(也可以叫做点击数量)算作网页评分的因素之一,这样想这样的网站的分数会很高,而这样的网站很多时候都是用户想找的,这样能够提高搜索引擎的准确率。
其三,去掉结果中的附加信息。
有调查指出,过多的附加信息加重了用户的信息负担,为了去掉这些过多的附加信息,可以采用用户定制、内容过滤等检索技术。
3.确定搜集返回,提高针对性
在这个方面现在的发展的方向是:
其一,垂直主题搜索。
垂直主题的搜索引擎以其高度的目标化和专业化在各类搜索引擎中占据了一系席之地,比如象股票、天气、新闻等类的搜索引擎,具有很高的针对性,用户对查询结果的满意度较高。
其二,非www信息的搜索。
搜索引擎提供了例如ftp等非www信息的搜索。
其三,多媒体搜索。
搜索引擎还提供了例如包括声音、图像等等多媒体信息的检索。
4.提供更优化的检索结果
在这个方面有两个主要的发展方向:
其一,纯净搜索引擎。
这类搜索引擎没有自己的信息采集系统,利用别人现有的索引数据库,主要关注检索的理念、技术和机制等。
其二,元搜索引擎。
元搜索引擎(metasearchenging)是将用户提交的检索请求到多个独立的搜索引擎上去搜索,并将检索结果集中统一处理,以统一的格式提供给用户,因此有搜索引擎之上的搜索引擎之称。
它的主要精力放在提高搜索速度、智能化处理搜索结果、个性搜索功能的设置和用户检索界面的友好性上,查全率和查准率都比较高。
第二章搜索引擎的结构
2.1系统概述
搜索引擎是根据用户的查询请求,按照一定算法从索引数据中查找信息返回给用户。
为了保证用户查找信息的精度和新鲜度,搜索引擎需要建立并维护一个庞大的索引数据库。
一般的搜索引擎由网络机器人程序、索引与搜索程序、索引数据库等部分组成。
图1搜索引擎的系统结构
2.2搜索引擎的构成
2.2.1网络机器人
网络机器人也称为“网络蜘蛛”(Spider),是一个功能很强的WEB扫描程序。
它可以在扫描WEB页面的同时检索其内的超链接并加入扫描队列等待以后扫描。
因为WEB中广泛使用超链接,所以一个Spider程序理论上可以访问整个WEB页面。
为了保证网络机器人遍历信息的广度和深度需要设定一些重要的链接并制定相关的扫描策略。
2.2.2索引与搜索
网络机器人将遍历得到的页面存放在临时数据库中,如果通过SQL直接查询信息速度将会难以忍受。
为了提高检索效率,需要建立索引,按照倒排文件的格式存放。
如果索引不及时更新的话,这样用户用搜索引擎也不能检索到。
用户输入搜索条件后搜索程序将通过索引数据库进行检索然后把符合查询要求的数据库按照一定的策略进行分级排列并且返回给用户。
2.2.3Web服务器
客户一般通过浏览器进行查询,这就需要系统提供Web服务器并且与索引数据库进行连接。
客户在浏览器中输入查询条件,Web服务器接收到客户的查询条件后在索引数据库中进行查询、排列然后返回给客户端。
2.3搜索引擎的主要指标及分析
搜索引擎的主要指标有响应时间、召回率、准确率、相关度等。
这些指标决定了搜索引擎的技术指标。
搜索引擎的技术指标决定了搜索引擎的评价指标。
好的搜索引擎应该是具有较快的反应速度和高召回率、准确率,当然这些都需要搜索引擎技术指标来保障。
召回率:
一次搜索结果中符合用户要求的数目与用户查询相关信息的总数之比
准确率:
一次搜索结果中符合用户要求的数目与该次搜索结果总数之比
相关度:
用户查询与搜索结果之间相似度的一种度量
精确度:
对搜索结果的排序分级能力和对垃圾网页的抗干扰能力
2.4小结
以上是对于基于因特网的搜索引擎的结构和性能指标进行了分析,本人在这些研究的基础上利用JavaTM技术和一些OpenSource工具实现了一个简单的搜索引擎——新闻搜索引擎。
在接下来的几章里将会就本人的设计进行详细的分析。
第三章网络机器人
3.1什么是网络机器人
网络机器人又称为Spider程序,是一种专业的Bot程序。
用于查找大量的Web页面。
它从一个简单的Web页面上开始执行,然后通过其超链接访问其他页面,如此反复,理论上可以扫描互联网上的所有页面。
基于因特网的搜索引擎是Spider的最早应用。
例如搜索巨头Google公司,就利用网络机器人程序来遍历Web站点,以创建并维护这些大型数据库。
网络机器人还可以通过扫描Web站点的主页来得到这个站点的文件清单和层次机构。
还可以扫描出中断的超链接和拼写错误等。
3.2网络机器人的结构分析
Internet是建立在很多相关协议基础上的,而更复杂的协议又建立在系统层协议之上。
Web就是建立在HTTP(HypertextTransferProtocol)协议基础上,而HTTP又是建立在TCP/IP(TransmissionControlProtocol/InternetProtocol)协议之上,它同时也是一种Socket协议。
所以网络机器人本质上是一种基于Socket的网络程序。
3.2.1如何解析HTML
因为Web中的信息都是建立在HTML协议之上的,所以网络机器人在检索网页时的第一个问题就是如何解析HTML。
在解决如何解析之前,先来介绍下HTML中的几种数据。
我们在进行解析的时候不用关心所有的标签,只需要对其中几种重要的进行解析即可。
文本:
除了脚本和标签之外的所有数据
注释:
程序员留下的说明文字,对用户是不可见的
简单标签:
由单个表示的HTML标签
开始标签和结束标签:
用来控制所包含的HTML代码
我们在具体解析这些HTMl标签有两种方法:
通过JavaTM中的Swing类来解析或者通过Bot包中的HTMLPage类来解析,本人在实际编程中采用后者。
Bot包中的HTMLPage类用来从指定URL中读取数据并检索出有用的信息。
下面给出该类几种重要的方法。
HTMLPage构造函数:
构造对象并指定用于通讯的HTTP对象
PublicHTMLPage(HTTPhttp)
GetForms方法:
获取最后一次调用Open方法检索到的表单清单
PublicVectorgetForms()
GetHTTP方法:
获取发送给构造函数的HTTP对象
PublicHTTPgetHTTP()
GetImage方法:
获取指定页面的图片清单
PublicVectorgetImage()
GetLinks方法:
获取指定页面的连接清单
PublicVectorgetLinks()
Open方法:
打开一个页面并读入该页面,若指定了回调对象则给出所有该对象数据
Publicvoidopen(Stringurl,HTMLEditorKit.ParserCallbacka)
3.2.2Spider程序结构
网络机器人必须从一个网页迁移到另一个网页,所以必须找到该页面上的超连接。
程序首先解析网页的HTML代码,查找该页面内的超连接然后通过递归和非递归两种结构来实现Spider程序。
虽然这里只描述了一个队列,但在实际编程中用到了四个队列,他们每个队列都保存着同一处理状态的URL。
等待队列:
在这个队列中,URL等待被Spider程序处理。
新发现的URL也被加入到这个队列中。
处理队列:
当Spider程序开始处理时,他们被送到这个队列中
错误队列:
如果在解析网页时出错,URL将被送到这里。
该队列中的URL不能被移入其他队列中
完成队列:
如果解析网页没有出错,URL将被送到这里。
该队列中的URL不能被移入其它队列中
在同一时间URL只能在一个队列中,我们把它称为URL的状态。
图1队列的变化过程
以上的图表示了队列的变化过程,在这个过程中,当一个URL被加入到等待队列中时Spider程序就会开始运行。
只要等待队列中有一个网页或Spider程序正在处理一个网页,程序就会继续他的工作。
当等待队列为空并且当前没有任何网页时,Spider程序就会停止它的工作。
3.2.3如何构造Spider程序
在构造Spider程序之前我们先了解下程序的各个部分是如何共同工作的。
以及如何对这个程序进行扩展。
流程图如下所示:
图2Spider程序流程图
IspiderReportable接口5
这是一个必须实现的接口,可以通过回调函数接受Spider所遇到的页面。
接口定义了Spider向他的控制者发送的几个事件。
通过提供对每个事件的处理程序,可以创建各种Spider程序。
下面是他的接口声明:
publicinterfaceIspiderReportable{
publicbooleanfoundInternalLink(Stringurl);
publicbooleanfoundExternalLink(Stringurl);
publicbooleanfoundOtherLink(Stringurl);
publicvoidprocessPage(HTTPpage);
publicvoidcompletePage(HTTPpage,booleanerror);
publicbooleangetRemoveQuery();
publicvoidSpiderComplete();
}
3.2.4如何提高程序性能
Internet中拥有海量的Web页面,如果开发出高效的Spider程序是非常重要的。
下面就来介绍下几种提高性能的技术:
Java的多线程技术
线程是通过程序的一条执行路线。
多线程是一个程序同时运行多个任务的能力。
它是在一个程序的内部进行分工合作。
优化程序的通常方法是确定瓶颈并改进它。
瓶颈是一个程序中最慢的部分,它限制了其他任务的运行。
据个例子说明:
一个Spider程序需要下载十个页面,要完成这一任务,程序必须向服务器发出请求然后接受这些网页。
当程序等待响应的时候其他任务不能执行,这就影响了程序的效率。
如果用多线程技术可以让这些网页的等待时间合在一起,不用互相影响,这就可以极大的改进程序性能。
数据库技术
当Spider程序访问一个大型Web站点时,必须使用一种有效的方法来存储站点队列。
这些队列管理Spider程序必须维护大型网页的列表。
如果把他们放在内存中将会是性能下降,所以我们可以把他们放在数据库中减少系统资源的消耗。
3.2.5网络机器人的代码分析
程序结构图如下:
图3网络机器人程序结构图
程序代码实现如下:
packagenews;
/**
*新闻搜索引擎
*计算机99630沈晨
*版本1.0
*/
importcom.heaton.bot.HTTP;
importcom.heaton.bot.HTTPSocket;
importcom.heaton.bot.ISpiderReportable;
importcom.heaton.bot.IWorkloadStorable;
importcom.heaton.bot.Spider;
importcom.heaton.bot.SpiderInternalWorkload;
/**
*构造一个Bot程序
*/
publicclassSearcher
implementsISpiderReportable{
publicstaticvoidmain(String[]args)throwsException{
IWorkloadStorablewl=newSpiderInternalWorkload();
Searcher_searcher=newSearcher();
Spider_spider
=newSpider(_searcher,"http:
//127.0.0.1/news.htm",
newHTTPSocket(),100,wl);
_spider.setMaxBody(100);
_spider.start();
}
//发现内部连接时调用,url表示程序发现的URL,若返回true则加入作业中,否则不加入。
publicbooleanfoundInternalLink(Stringurl){
returnfalse;
}
//发现外部连接时调用,url表示程序所发现的URL,若返回true则把加入作业中,否则不加入。
publicbooleanfoundExternalLink(Stringurl){
returnfalse;
}
//当发现其他连接时调用这个方法。
其他连接指的是非HTML网页,可能是E-mail或者FTP
publicbooleanfoundOtherLink(Stringurl){
returnfalse;
}
//用于处理网页,这是Spider程序要完成的实际工作。
publicvoidprocessPage(HTTPhttp){
System.out.println("扫描网页:
"+http.getURL());
newHTMLParse(http).start();
}
//用来请求一个被处理的网页。
publicvoidcompletePage(HTTPhttp,booleanerror){
}
//由Spider程序调用以确定查询字符串是否应删除。
如果队列中的字符串应当删除,方法返回真。
publicbooleangetRemoveQuery(){
returntrue;
}
//当Spider程序没有剩余的工作时调用这个方法。
publicvoidspiderComplete(){
}
}
3.3小结
在本章中,首先介绍了网络机器人的基本概念,然后具体分析了Spider程序的结构和功能。
在最后还结合具体代码进行了详细说明。
本人在编程中运用了JavaTM技术,主要涉及到了net和io两个包。
此外还用了第三方开发包Bot。
第四章基于Lucene的索引与搜索
4.1什么是Lucene全文检索
Lucene是JakartaApache的开源项目。
它是一个用Java写的全文索引引擎工具包,可以方便的嵌入到各种应用中实现针对应用的全文索引/检索功能。
4.2Lucene的原理分析
4.2.1全文检索的实现机制
Lucene的API接口设计的比较通用,输入输出结构都很像数据库的表==>记录==>字段,所以很多传统的应用的文件、数据库等都可以比较方便的映射到Lucene的存储结构和接口中。
总体上看:
可以先把Lucene当成一个支持全文索引的数据库系统。
索引数据源:
doc(field1,field2...)doc(field1,field2...)
\indexer/
_____________
|LuceneIndex|
--------------
/searcher\
结果输出:
Hits(doc(field1,field2)doc(field1...))
Document:
一个需要进行索引的“单元”,一个Document由多个字段组成
Field:
字段
Hits:
查询结果集,由匹配的Document组成
4.2.2Lucene的索引效率
由于数据库索引不是为全文索引设计的,因此,使用like"%keyword%"时,数据库索引是不起作用的,在使用like查询时,搜索过程又变成类似于一页页翻书的遍历过程了,所以对于含有模糊查询的数据库服务来说,LIKE对性能的危害是极大的。
如果是需要对多个关键词进行模糊匹配:
like"%keyword1%"andlike"%keyword2%"...其效率也就可想而知了。
所以建立一个高效检索系统的关键是建立一个类似于科技索引一样的反向索引机制,将数据源(比如多篇文章)排序顺序存储的同时,有另外一个排好序的关键词列表,用于存储关键词==>文章映射关系,利用这样的映射关系索引:
[关键词==>出现关键词的文章编号,出现次数(甚至包括位置:
起始偏移量,结束偏移量),出现频率],检索过程就是把模糊查询变成多个可以利用索引的精确查询的逻辑组合的过程。
从而大大提高了多关键词查询的效率,所以,全文检索问题归结到最后是一个排序问题。
由此可以看出模糊查询相对数据库的精确查询是一个非常不确定的问题,这也是大部分数据库对全文检索支持有限的原因。
Lucene最核心的特征是通过特殊的索引结构实现了传统数据库不擅长的全文索引机制,并提供了扩展接口,以方便针对不同应用的定制。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 web 搜索引擎 实现