摘要:当今时代中,网络方面的发展如同火箭一般迅猛,也逐渐走入大众的视野并逐渐被四处扩展,人民于网络中所接收到的信息量也不断提升。随着世界上Web网页的数量剧增,甚至达到并超过40亿,我国的该网页也超出了3亿。浏览器是帮助大众在网络中获取更多信息的一个主要载具,在互联网中发挥重要作用的主要有搜索引擎,本文将在此深入的对搜索引擎做一个研究与阐述。还会通过对互联网中的机器人、索引的引擎及Web服务器三大重要应用对网络中有关引擎的构造进行深层面的讲解。为了更加深刻的理解这种技术,本文实现了一个简单的搜索引擎Damon。
关键词:jsp;搜索引擎;设计;实现
Abstract: In today's era, the development of the network is as rapid as the rocket, and gradually enters the public's field of vision and is gradually being expanded. The amount of information people receive in the network is also increasing. With the rapid increase in the number of Web pages in the world, even reaching and exceeding 4 billion, the number of pages in China has exceeded 300 million. The browser is a major vehicle that helps the public to obtain more information in the network. The main role of the browser in the Internet is the search engine. This paper will make an in-depth study and elaboration on the search engine. The three major applications of the Internet, such as robots, indexing engines and Web servers, will also provide a deeper explanation of the engine architecture in the network. To get a deeper understanding of the technology, this article implements a simple search engine called Damon.
Key words: JSP; Search engine; Design; implementation
搜索引擎的优化策略及方法研究
1前言
在网络十分发达的今天,面临非常丰富网络资源,不论我们是学习、研究、还是工作需要在网络上能查找到相关的资料信息,人们现在对网络的依赖程度越来越高,但是如何有效的搜索信息却是一件困难的事情。但是幸运的是类似于百度、Google这样的搜索网站的出现能帮助我们解决这样的问题,使我们可以在网络中查找自己所需要的信息资源。从理论上讲所有的用户都可以从搜索出发到达自己想去的网上任何一个地方。并且我们在网络中可以找到几乎我们需要的一切的可能的东西,本文从搜索引擎发展历史开始,然后详细介绍了程序中使用的组件Lucene,重点阐述了全文搜索引擎的基本原理、所采用的相关技术,进而引出专题搜索引擎,并且为提高专题性所采取的一些方法。分析了网页文档半结构化的数据特点以及使用自己编写的spider程序从Internet上取回综合的信息经过Lucene处理加入索引文件中,最后将重点字眼输入便可将有关信息传回用户。
2 搜索引擎的相关理论分析
2.1 搜索引擎的历史渊源
网络中的资料早于万维网诞生之前已广泛于人群中流传及分享了。这些有关资源在以前往往会出现在各类型可以使用匿名进入的FTP 站点,其主要的内容包括学术科技的报告、研究类的软件较多,并且多以计算机文件的状态呈现,而其文字有关资料的编码多为PostScript及纯文字的版本(原因是当时还未存在HTML) [1]。于前期发展阶段,各大互联网之中的有关网站极为匮乏。所以极其容易搜寻到有关材料。但没想到的是,互联网如今正处于急速发展的时代,其所储备信息不足以满足广大网络民众,他们很难从其找到自己所需资料,所以搜索引擎的诞生便是为了实现广大人民可快速根据关键词搜索的心愿。1990年代一名大学学生Alan Emtage设计了Archie来帮助民众于较为松散的信息中找寻所需要的资料。Archie是这名学生为了在Web未诞生之际,为了使得这些分散在各大FTP主机的资料搜寻起来较为方便而做的设计[2]。
上述所提及软件Archie的工作模式其实与如今各类搜索引擎作用相当,根据现有的脚本内容来主动搜寻网络上存在的资料,并牵引相关资料,最终可供搜索者搜寻及使用。也是受到这个设计的启发, Matthew Gray在1993年间有了新的发明,World Wide Web Wanderer于该年诞生,其作为全球首先运用HTML之间的项链关系来测试Web发展规模的“机器人”程序 [3]。现如今许多类型的搜索引擎其实都受到Wanderer的启发得以出现。
“机器人”这一新词于那个时候十分收到各大编程者的喜爱,纷纷将其运用在编程中。这一词语主要用于表达其能够通过一种人类无法比拟的速度去不断进行有关任务的程序。因为该程序在搜索的过程之中就如同蜘蛛一般运行着,所以,一般大众也将之称之为蜘蛛程序。
作为Scream Nation的现场活动制作人和首席执行官Michael Mauldin 在1994年结合John Leavitt 所发明的蜘蛛程序的优点,并且将其与其搜索引擎所结合,最终构造出了为许多人所知的Lycos[4],并且其可以说是与当今时代较为密切的一种引擎软件。在此软件诞生之后,也使得这种引擎的价值不断升高。所以也不断涌现了许多更加精细、更加完善的引擎。也是在1994年,毕业于斯坦福大学的两名博士生也一同建立了索引Yahoo,让搜索引擎的概念逐渐为人们所了解。搜索引擎也不断处于发展阶段,现如今,最为出众的便是Google网页,其为广大群众所知,并且于其数据库中存在超过30亿之多的有关数据。
网络规模在其不断发展之下急速扩张,在这种网络的全民时代下,光靠一家搜索引擎是是远远不能满足民众的需求,也无法很好融入当前市场情况中,所以各大搜索引擎也不断的进行合作及分工为满足需求,还出现了专门的引擎技术及搜索库的供应商。其中有不单独也不面向用户的引擎 Inktomi,还有可以提供对整篇文章进行搜索的引擎的Overture、、MSN,其实这类引擎也可以被叫做搜索引擎的搜索引擎 [5]。
2.2 搜索引擎基本结构
通过各使用者的需求所搜寻信息,且根据其关键词从对应的索引数据对相关资料提出从而展现给使用者,这便是搜索引擎的运行流程。由互联网机器人、索引两个程序及索引的数据库三大部分构成搜索引擎。
2.2.1 网络机器人
网络机器人一般被许多用户叫做“网络蜘蛛”。作为一个具备强大功能的WEB扫描应用,它在扫描过程中可以通过搜索出其中所含有的超链接并将其加入等待扫描清单分别对其进行扫描。HTML超链接于WEB之中广泛被得到使用,这也是为什么可以通过该程序对整个WEB页面扫描的原因 [6]。
通过设置一些较为关键的链接并且定制有关扫描策略加深这种程序的深度及广阔度。其所构建的核心便是整个网络看做一棵树,通过递归不断的将符合条件的页面的连接拿到进行处理。
2.2.2 索引与搜索
网络蜘蛛会将其浏览过的网络页面,将其置于临时安置的数据库之内,并且只用SQL这个程序来检测及搜寻各类信息的话,将会使得整个查阅信息的速度大大降低,且令人感到不耐烦。所以为了达到效率提升的目的,这时便需要构建索引的出现来缓解该情况。(大多数人学过的SqlServer2005中曾介绍字段添加索引能提高查询速度这个倍数是惊人的),各位使用者在将他们所需要的搜索要求后,有关搜索程序会在其索要数据库中进行搜索从而把相关内容传回给搜索者。
2.2.3 Web服务器
在日常生活之中,我们所运用较为普遍的是tomcat、Weblogic和JBoss这三类服务器,这里面中tomcat是最比较普遍常用的一个,它以稳定的性能,和开源的优势得到了广大用户的承认,其实JBoss也是一个开源的但是它的结构比较复杂使用起来不是很灵活,而WebLogic则是一款收费的商业型的服务器,在我实现的开发中择用了简单使用的tomcat容器作为所使用的web程序的服务器。在客户通过查询各类浏览器之时,会需要所使用系统对web服务器及后台搜索数据两者进行相连接。当于某个浏览器使用者输入其想要内容,并通过索引中来进行搜寻并最终反馈到客户端之中。
2.2.4 搜索引擎的主要指标及分析
响应时间、准确率及相关度是主要检测该搜索引擎的三个较为重要的指标。 也是由于这些指标从而确定了这些引擎的技术含量。其技术指标也最终对搜索引擎的有关评价的指标的数值。能够对事物有着一定的反应速度及精准度才能够成为优秀的搜索引擎,搜索的引擎也能够对其进行保护及促进作用。
准确率:所搜寻内容是否达到客户的预期。
相关度:搜索者是否搜索到与其预想所要结果。
精确度:能否对一些垃圾信息及网站进行有效的过滤。
3 网络机器人
3.1 什么是网络机器人
作为一种十分专业的一类程序,该互联网机器人还可被称作为Spider。能够查询到许多丰富的Web页面。一开始先由该入口开始进行这类程序,接着借助超链接的传递之下进行对其他各种页面的搜寻,所以原理上其可以检测到所以处于互联网中的任何一个页面。但现实情况与之相反。由于这种方式会将会耗去大量的时间和金钱,一次所有的企业基于商业盈利的角度都不会不停的使用网络机器人进行搜索WEB页面。一般来说这些企业都是定时的进行索引数据库的更新,据说Google是每隔28天进行一次索引数据库的更新并维护这些大型数据库[7]。
3.2网络机器人的结构分析
在许多有关的协议的前提之下,Internet是更为灵活及复杂的一类协议,甚至还建立于系统层的协议之上。构建于HTTP的相关协定之下,web得以建立;而HTTP又是构建于有关TCP/IP的协议之上,并且还作为一种Socket协议。因此互联网机器人本质是一种在Socket前提之下所构建的。
往往在web该网页之中,大多数是运用HTML来对语言进行一定的记录,所以该机器人将会通过对HTML的标记进行解释及分析而搜寻网页。[8]首先要对HTML之中的一些重要数据类型进行分析及充分了解才能进行,仅仅需要对一些特点及关键的形式进行分析即可,并不用囊括所有的标签。下面是一些较为重要的因素。
脚本:一些插入HTML标签中的代码语言 (例如:JavaScript、jsp页面中的Java代码等等)
简单标签:主要由一些单独表达的一些HTML标签(
、 等等)(1)超连接标签
该标签具备着Internet网页链接文件功能重新诠释了WWW。其旨在令搜索者能够随意进行转移新页面。
(2)图像映射标签
该标签也具有着较为重要的作用,搜索者可通过点击页面中图片来转到其他页面。
(3)表单标签
该标签是在该web页面内对数据进行输入的一个单元。其较为主要的应用是其通过让使用者来输入数据从而通过对按钮的点击实现内容的上交。
(4)表格标签
HTML的构建部分为各类型表格,一般用于通过格式化来储存且将各类数据展示出。
如何对HTML标签进行解释及分析主要有两类型的方式:首先用Swing类这类或者另一种类型HTMLParser来对HTML标签进行最终分析,且我在编程过程中通常用HTMLParser来对其组件对html进行操作。HTMLParser是一个很优秀的开源组件,它有很强大的支持HTML解析的功能,接着将对一些其所包含的核心组件类进行深层次的讲解。
org.htmlparser.Parser对htmlparser中的一些较为基本的类别进行了概念的定义。
org.htmlparser.nodes定义了基础的node,包括:AbstractNode、RemarkNode、TagNode、TextNode等。
org.htmlparser.tags定义了htmlparser的各种tag。
3.3 Spider程序结构
要想找到一个页面上的超连接,网络机器人必须从一个网页转移到另一个网页。可以通过递归和非递归两种结构来实现Spider程序,而为了实现Spide程序,程序首先要解析网页的HTML代码,然后查找该页面内的超连接。
3.3.1 递归结构
递归是通过在一个方法中调用出自己本身的程序来设计技术。这一程序虽容易实现,但却由于它较为耗费内存的特性,一般不被用于较大型的设计,多线程技术也未能实施。
3.3.2 非递归结构
使用队列数据的构建,首先Spider会把超连接加入到等待队列中,在这一程序发现超连接后并不能调用自身的情况下。当Spider程序会根据制定的策略逐个访问队列中的超连接地址。在每一个队列都保存着同一处理状态的URL,而在这里只是描述了其中的一个队列,但在实际的编程过程中运用了四个队列。
等待队列:URL等待被Spider程序处理时,会被安排在这一队列里。并且新发现的URL也将会被加入到这一个队列中
处理队列:当Spider被送到这个队列当中,表明程序已经开始处理。
错误队列:若在解析网页时出错的状况下,URL将被送到这里。而位于这一队列的数据讲不能被移除。
完成队列:URL将被送到完成队列,如果解析网页没有出现错误。由于在同一时间URL只能存在于一个队列中,而且该队列的URL不能被移到其他队列,所以把它称为URL的状况。
上述所向我们所展示了一个队列的变化过程,于此过程之中,若将URL添加进到一个等待队列中去,那么Spider程序就会进行运作。只要等待队列中出现了一个网页或者Spider程序正在处理着某一个网页,那么程序就会继续进行它的工作。当出现等待队列为零的情况并且当前无任何网页时,Spider程序就会终止工作。
4 基于Tomcat的Web服务器jsp搜索引擎程序设计详解
4.1 开发工具、平台及资源
MyEclipse 6.0开发工具
Sun JDK 1.6.1
Tomcat 6.1服务器
开源Lucene组件
4.2 Lucene开源组件简介
我在程序设计实现中,使用了lucene开源组件,并未使用数据库做为存放大量信息的索引数据库,最主要的原因就是考虑使用Lucene效率会大大的高于使用普通数据库的性能。所以先与Lucene有关的技术做个简单讲述。
Lucene全文检索的含义以及为什么要使用Lucene:
Jakarta Apache的起始项目是Lucene。它是一个引擎工具包,并且由Java全文索引组成,能更加便捷地镶入到更多的应用中达到针对应用的全文索引或检索功能。如果把网络机器人的索引到的网页信息放入数据库中,那么当用户在客户端检索数据的时候,如果数据库中存放着大量数据的话,没有好的数据库检索策略,数据查询速度大大减慢,而且其搜索引擎的性能也会因此而大打折扣,会导致用户长期的等待,结果超出用户的人手时间。考虑以上的原因,我在设计的时候选择了使用Lucene,将网络机器人,检索到的网页的基本信息交与Lucene处理,经过Lucene处理后将搜索到的网页信息建立相应的索引,并且存放到Lucene创建的索引文件中去,从而在用户检索相应的数据的时候,免去了从数据库中查询的步骤,直接从索引文件中获取所需的信息,这样程序对文件的IO操作要远远大于数据库的检索的效率[10]。从而提高了程序的性能和用户的体验。
4.3 Lucene的简单说明
4.3.1对Lucene的认识
Lucene最常用的的接口是API,其传输结构与数据库的表非常相似,因此许多较为旧式的一些应用文件、数据库等都能够被便捷地映射到Lucene的接口和存储结构里。所以通过总结可以看出:Lucene可以被当成一个可以维护检索功能的数据库系统,所以说Lucene和数据库在一定程度上具有很大的相似度,Lucene中的一些资料数据很大程度会与一些数据库极为相似。而且在Lucene中的Field类则是充当了索引文件中的Decument类的属性的集合字段,它的作用当然就是相当于数据库的列的属性,在我们使用Java也好或者是C#也罢查询数据库的时候,数据库返回的结果集就相当于Lucene结果输出,也就是Hits类对象了[11],即:(doc(field1,field2) doc(field1...))在Hits中查询结果集。
4.3.2 Lucene的索引效率
前面提到了,我使用Lucene主要的目的就是为了提高索引数据库中的数据查询速度,下面我们就来看看Lucene的基本的索引原理吧,一些相关的关键词索引表常常会附于一些书籍背后,通常它就类似于我们常用的字典中的目录,帮助读者迅速定位相关内容的页码,使得时间的节省。而数据库索引也用到了同一原理,通过书后面的索引可以提高查找的速度和效率……由于它的顺序是安排好的,所以索引效率较为高效。而且检索系统的关键其实就是排序问题。
当使用like "%keyword%"时,数据库索引是不能够产生任何作用的,因为数据库索引并不是为全文索引设计的。LIKE对含有模糊查询的数据库而言,在性能上有着极大的危害,因为在使用like查询时,搜索过程就会重新变成一页页翻书的遍历过程了。我曾经在Oracle中做过一个实验,在数据库中使用索引和不使用索引的速度先比,前者是后者速度的将近上百倍,当然这个结果不是唯一的,对于数据量越大的数据库中我们使用索引的效率以及能给我们带来的方便时越为明显的,若要对以下这种模糊关键词进行搜寻,效率则会十分底下:like"%keyword1%" and like "%keyword2%" ...。建立一个像科技索引一样的反向索引机制的关键就是建立一个高效检索系统,这一高效检索系统在将数据源排序顺序存储的同时,又会有另外一个已经排好顺序的关键词列表,用于存储关键词从而通过一些关键词反映它的文章,将模糊查询和精确查询逻辑组合的过程为该类别的主要过程。这一过程其实会迅速地促进了多关键词查询的效率增高,因此可以说全文检索的关键点其实仍然为排序问题。在本文中我们主要是研究的搜索引擎的效率问题,在其实在Lucene中还有很多个人认为很经典的技术,比如是分词技术,还有相关的信息匹配技术等等由于时间文章的篇幅限制,我在此不多赘述。
4.4 引入基于Tomcat的Web服务器开发设计
旨在对信息进行最终发布、搜寻资料、对数据进行处理的这些诸多功能并构建基础平台的一类服务器称之为web服务器。该服务器主要通过三个步骤实现顺利运行:首先,这一浏览器在向某个制定的服务器请求web页面的请求;接着,该服务器通过接受web页面的请求过后对其请求传递至web浏览器;最后,该服务器最终接收到所搜索内容,并通过web页面将其展示。综上所述,这便是一个具有特征的一个HTTP请求的一个过程。
作为一个开放源代码,Tomcat是根据Java的Web应用软件容器对servlet及JSP Web这些软件的运行。其还由Apache-Jakarta的附属项目所支持并且还会由Java进行一定程度的保护。[12]Tomcat Server也会依据servlet及JSP来对其进行严格的规范及运行,所以这也是为什么这类代码相较于其他各类型应用都较好。
4.5 用户接口设计
4.5.1 客户端设计
搜索页面的设计极为重要,比如说为大众所知的Google就因为它界面是否整齐及简洁而受到好评。因此我在设计过程中也将其两点进行了整合结合。
4.5.2服务端设计
这一目标重点是通过jsp的技术来得以实现,搜索者运用GET的方来对服务方提交其搜寻条件通过客户端这方,接着将通过Tomcat来对该服务方所上交数据进行进一步的分析,再通过调用lucene来最终进行搜索的操作。最终所得出的结果将会通过HTTP形式的消息包最终输往客户端,最终完成一次查找的动作。
5 在Tomcat上部署项目
WAR是Tomcat里面中的一个应用程序。WAR与JAR该程序格式类似,是一种web的的格式也是包含众多文件内容的压缩包,为sun所提出。由有一定目录构造来进行组织的一系列文件:包括了Html及Jsp两类型文件或是将其两者囊括的文件往往被记录于这个目录,除这两者之外,还含有有着重要地位的WEB-INF目录。在这个极其重要的目录之中,包涵着文件web.xml及目录classes,前者为该应用的标配,是Javaweb该程序的入口之处;后者则囊括着servlet类别及Jsp及servlet所依靠的另外一些类别。而往往这些被依靠的类别最终可以整合为jar最终放置于WEB-INF之下的lib该目录之中,置于CLASSPATH这个处于系统中的类也是可以的。[13]
有关如何部署应用程序其实极其容易在Tomcat之内,仅仅需要将其置于Tomcat的webapp这一类目录之下,因此其就会主动及快速地搜索到该文件,最终将其进行解压。在第一次对应用中的Jsp进行搜索时,速度将没有这么快,原因是它需要把jsp通过转化变成servlet的文件,最后通过编译,经过这一操作过后,速度将会得到提升。
6 结论
(1)经过一段时间的设计和开发,虽然基本的程序已经能够正常运行已经开发完毕。基本实现了根据用户的基本需求能搜索到自己的需要的,感兴趣的结果,但是由于毕业设计时间较短,所以设计方面还有许多不尽人意的地方,单从程序方面讲,尤其是文章的撰写感觉很多不完善的地方,这些都有待进一步改善。总的来说,在这次的毕业设计中遇到了不少的问题,其中大部分得到了很好的解决,但也有少部分遗留的问题。
(2)如果说本命题还需要进一步的研究,本人认为下面应该从搜索引擎与数据库方向研究,首先是数据库与搜索引擎的结合与优化,数据库性能方面的优化研究,数据库检索方面的研究有优化,都是有待于思考的问题,因为数据库在现在软件中越来越占有举足轻重的地位,数据库的应用在无论在软件还是各种领域都是至关重要的核心问题,因此数据库与搜索引擎的结合是一个必然的趋势。
(3)其次由于时间比较仓促,本文在这段时间内注重的研究的是搜索引擎的工作效率,以及响应时间和速度,因此本程序的准确率,相关度,精确度相关的算法需要有待于进一步的优化。
参考文献
[1]周燕,百度搜索引擎营销模式研究[D].华东理工大学,2014
[2]侯志伟,面向电子商务搜索引擎的研究[D].郑州大学,2015
[3]赵立磊,基于网页去重的垂直搜索引擎设计与实现[D].大连理工大,2016
[4]陈智鹏,基于统计的搜索引擎中文输入纠错技术研究[D].北京邮电大学,2015
[5]刘冰,申丽红,李涛,知识库系统原理探讨[J].软件导刊,2017,(03):43-44
[6]俞平,肖南峰,甘志刚,第三代搜索引擎研究[J].南京信息工程大学学报(自然科学版),2019,(02):65-66
[7]胡风华,刘冰,基于知识库系统的智能搜索引擎研究,电脑知识与技术,2018,(13):77-78
[8]刘奕群,岑荣伟,张敏,茹立云,马少平,基于用户行为分析的搜索引擎自动性能评价[J].软件学报,2018,(09):99-101
[9]张益民,吕英杰,盛国军,搜索引擎服务内容的发展现状分析[J].现代情报,2015,(13):44-45
[10]刘成亮,韩海伟,知识库系统的原理及其在智能搜索引擎中的应用[J]. 电脑知识与技术. 2016,(15):77-78
[11]凌雄娟,Agent技术在网络搜索引擎中的应用[J].脑与电信,2018,(06):44-45
[12]王春红,张敏,隐含语义索引模型的分析与研究[J].计算机应用,2017,(08):33-34
[13]刘畅,综合搜索引擎与垂直搜索引擎的比较研究[J].情报科学,2016,(17):19-20
致谢
毕业论文终于到了划句号的时候,作为大学的最后一项艰巨的任务作业终于完成了,由于本人的文笔不是很好,因此感觉论文写作的过程并不轻松,加上工作的压力时时袭扰,很多知识的积累不是很到位,第一次花费如此长的时间和如此大量的精力,完成一篇具有一定学术价值的论文,回头看看自己走过的路,看着自己的成果感觉很欣慰。落后留下的滋味,值得我一生留恋。
在陆导师指导下。本次毕业设计慢慢的画上一个句号了。可是,对我来说,本次的设计过程对我产生了深远的影响,通过陆锡聪导师的指导教育,使我不仅仅在知识水平和解决实际问题的能力上有了很大的提高。更重要的是面对问题的精神,一种一丝不苟,那种负责的精神让我很感动,在此十分的感谢老师的辛勤指导。让我明白了知识在实践中才能得到真正的升华的重要性,也使我明白了,我们现在掌握知识多少不是最重要的,重要的是培养自己的一种能解决问题的实际的能力。