基于JAVA技术搜索引擎的设计与实现
2017-09-07刘智勇
刘智勇
摘要:随着科技的进步与发展,互联网成为21世纪的宠儿,网络信息也复杂多样。这些繁杂的网络信息在给我们带来便利的同时也产生了极大的问题,比如如何在这海量的信息里面找到自己所需要的内容,成为当前互联网技术的热门领域。互联网信息复杂多样,因此想要迅速、快捷的找到所需要的信息内容,就需要搜索引擎来帮忙实现。本文就对搜索引擎的工作原理,组成和数据结构等方面进行分析,对搜索引擎未来的发展方向进行探索。众所周知,智能化是未来的一个大的趋势,想要实现搜索引擎的智能化,就需要使搜索引擎具备自我学习的能力,适应用户的查询需求。
关键词:搜索引擎;智能化;信息检索
中图分类号:TP391.3 文献标识码:A 文章编号:1007-9416(2017)05-0205-01
1 搜索引擎概述
随着信息时代的来临,互联网的迅速普及应用,已经成为我们正常生活中不可或缺的一部分。因为互联网信息具备共享等多种特性,使得网络信息成倍的增加。谷歌公司所收录的网页信息都已经过亿,而且每天还在不断的攀升,想要在这么多数据里面,选取对自己有用的信息,就需要借助搜索引擎来进行实现。
搜索引擎是从1994年诞生,随着互联网的信息日益增多,搜索引擎也在不断的发展,从1994年到现在历经三个阶段。搜索引擎的第一个阶段就是1994年到1996年,这个阶段的搜索引擎以集中式检索为主。当时网络信息并没有很多,一般都是少于百万的网页,也没有索引,检索速度也非常慢。也是采用网络、数据库等关键技术来实现。第二个阶段是1996年到1998年,这个期间,搜索引擎采用分布式检索方案,使用多个微型计算机来协同工作,其目的是为了提高数据规模和响应速度。一般可以响应千万次的用户检索请求。第三代搜索引擎,就当前所使用的搜索引擎,也是搜索引擎极为繁荣的时期。它拥有完整的索引数据库,除了一般的搜索,还有主题搜索和地域搜索。但是这些搜索结果反馈给用户的数据量较大,检索结果的相关度又成为研究的核心。
我们通常所用的搜索引擎也分为多种,按照信息的搜集方法和服务提供方式的不同进行区分,常用的有三类,第一,目录式搜索引擎。它是以人工方式进行信息的搜集,由编辑员进行审查并制作成信息摘要,将其进行分类置入架构中去。这类搜索方式的搜索结果准确,信息质量高,但是需要大量的人工成本,信息更新不及时,维护量大。第二,机器人搜索引擎。就是我们常说的网络爬虫,是由一个网络蜘蛛的机器人程序以某种策略自动地在互联网中搜集和发现信息,这种信息查询方式是由索引器完成的。索引器为搜集到的信息建立一个完整的索引,根据用户所输入的关键词,对索引库进行检索,从而查询到信息并将信息反馈给用户。这种检索方式,可以保证数据的及时更新,减少人工成本,但是返回的信息很多,相关度不高。第三,元搜索引擎。这类搜索引擎比较奇怪,没有自己的数据信息,而是根据用户输入的查询关键字向其他搜索引擎发出请求,由其他搜索引擎来完成,并且将返回的结果进行筛选,排序处理,然后将这些信息作为自己的结果反馈给用户。
2 搜索引擎的系统架构
一般来说,搜索引擎的工作流程分为四步,从网上抓取网页,建立索引数据库,根据用户的关键词在索引数据库中进行搜索,对搜索结果进行相关度排序处理。它主要由网络蜘蛛、索引器和检索器三部分组成。网络蜘蛛,英文名称Web Spider,它的主要功能是从指定的IP出发,便利整个互联网中所存在的网页,它可以借助网页中的URL爬到其他网页中去,不停的对这个过程进行重复,将爬过的网页搜集起来并存储到页面存储库中去。Indexer,索引器,它的主要功能是将Web Spider收集回来的网页进行分析,提取网页中所含的信息,并按照相关度进行计算,将这些相关信息建立完整的网页索引数据库。Searcher,检索器,用户输入关键词进行搜索,它负责对关键词进行分解,根据搜索器从网页索引数据库中查询到相关度较高的网页,对其进行排序处理,然后交给系统,系统会把结果进行组织处理,反馈给用户。
搜索引擎对于文件的存储要求较高,操作系统又有自身的缺陷,在大型文件的管理方面存在诸多局限,这就需要搜索引擎自行定义和管理大型文件系统。大型文件是一种跨多文件系统的虚拟文件,支持64位寻址方式,可自动处理多文件系统的分配和寻址。
3 搜索引擎的软件实现
利用Java技术对搜索引擎的三个主要部件进行实现,能够完成搜索引擎的基本功能。在进行软件开发前期,要进行Java开发环境的搭建,需要Java程序开发包,Java 2Platform Standard Edition5.0,实现索引和搜索的Java类库,Lucene1.4.3,还有Servlet/JSP容器,Tomcat 5.5。下面对搜索引擎所用到的Java相关技术进行介绍。
3.1 Java的Internet链接技术
Web Spider为了抓取网页,其主要原因是它能够与Web服务器通信,进行网页的下载。Java提供诸多支持Internet链接的类库,即套接字类和与URL地址一起工作的URL类库。套接字就是我们常说的端口,它们都有自己的端口号,端口号与链接相互通信,客户端程序制定端口号发送链接请求。而Java中定义Socket和ServerSocket两个类,在套接字程序设计中较为常用。Socket类可以声明客户端套接字,ServerSocket声明服务端套接字,建立点对点的链接。在建立之前,服务端在监听,客户端在请求,一旦链接建立完成,使用I/O流来进行二者之间的通信。而URl类允许解析URL,为它创建一个对象,将其解析为主机名和路径,除此之外,URL类还具有打开地址链接的能力,從而实现URL的信息检索能力。
3.2 Java中的中文处理和多线程机制
搜索引擎的工作流程就是网页的抓取、索引、搜索结果输出,当然在这些过程中都遇到了汉字乱码的问题。目前Java很好的支持汉字,在中文处理方面也非常的优秀,前提条件是需要设置正确的编码方式。而且在搜索引擎的工作过程中都是以多线程的机制运行,可以提高工作效率。Java中提供两种办法来进行多线程的操作。第一种方法就是继承Thread对象,封装线程,在用run方法来为特定的线程提供代码。但是Java不支持多继承,当它需要继承其他类时,这个方法就行不通。那么可以试试第二种办法,就是执行Runnable接口,在类里面建立Run方法,这样就可以解决第一种方法的限制。
3.3 Lucene实现索引和搜索
Lucene是一种高性能的Java库,而且易于扩展,可以利用其中的Java类在程序中增加索引和搜索功能。Lucene可以添加索引和搜索功能到应有程序中,并且通用性好,支持多种文本格式数据,因为它不关心数据的来源、格式和语言,只要是能转换成文本,都可以利用Lucene来进行索引和搜索。而且它还可以索引存储在数据库中的数据,实现全文检索。提供核心类,可以在应用程序中很是方便的加入索引和搜索功能。
4 结语
搜索引擎的基本功能都可以利用Java进行实现,而且极为方便。本文构建的Web Spider利用队列和多线程机制,使得搜索引擎具备较高的搜索效率,较好的支持中文。通过这次设计与实现,对搜索引擎的工作原理和整体架构有了一个较为全面的认识。
参考文献
[1]唐陪和,杨新论,刘浩.Google搜索引擎剖析[J].情报检索,2004,(8):88-90.
[2]印鉴,陈忆群,张钢.搜索引擎技术研究与发展[J].计算机工程,2005,(14).
[3]孙西全,马瑞芳,李燕灵.基于Lucene的信息检索的研究与应用[J].情报理论与实践,2006,01.endprint