爱搜-概况

posted in: 技术 | 23 | (1014)次浏览

爱搜-概况

爱搜-网络爬虫

爱搜-中文分词

爱搜-web应用与搜索

爱搜-系统问题优化与改进

爱搜-系统测试

爱搜-结语

写在前面,这是我的本科毕业设计。

基于Java的中文网络搜索引擎设计与实现

1.引言

面对浩瀚的网络资源,搜索引擎为所有在网上寻找信息的用户提供了一个入口,毫不夸张的说,所有的用户都可以从搜索出发到达自己想去的网上任何一个地方。搜索引擎技术发展至今,逐渐趋于成熟,搜索结果也越来越好。有数据显示,大型的搜索引擎其索引量已达到TB级别,每秒需要承受高达百万次的查询,可见如今搜索引擎技术已经非常复杂。

本文研究的是基于因特网的搜索技术,在现有的搜索引擎原理的基础上,研究并编码实现了一种轻量级的中文网络搜索引擎(爱搜)。爱搜包含一整套网络搜索引擎技术,其中包括网络爬虫、中文分词与索引引擎和Web应用与搜索等。在具体实现的过程中,爱搜的搜索等待时间达到20s以上,经过研究发现问题在于索引效率和排序算法。于是首先改进了系统中的索引引擎,将索引的存储结构从关系型数据库改为非关系型数据库,同时采用缓存技术将倒排索引直接存储在内存中。接着改进了现有的网页结果排序算法,提出了基于Page Rank、TF-IDF和搜索统计等算法的混合排序算法Page Weight。排序算法改进后,搜索等待时间提高了一个量级。在搜索技术基础上,爱搜还包含了一些上层的应用。其中有网站分析,它能为站长提供网站流量监控和漏洞检测等工具。还有语音搜索,可以让用户通过“说”的方式去搜索,并且能“听”到搜索结果。

总体来说,爱搜希望提供一个轻量级的中文网络搜索引擎解决方案。

 

2.搜索引擎的结构

2.1 系统概述

搜索引擎是根据用户的查询请求,按照一定算法从索引数据中查找信息返回给用户。为了保证用户查找信息的精度和新鲜度,搜索引擎需要建立并维护一个庞大的索引数据库。一般的搜索引擎由网络爬虫程序、索引与搜索程序、索引数据库等部分组成。系统结构如图2.1所示。

爱搜-系统结构图
爱搜-系统结构图

图2.1 系统结构图

2.2 搜索引擎的构成

1 网络爬虫

网络爬虫[1]也称为“网络蜘蛛”(Spider),是一个功能很强的WEB扫描程序。它可以在扫描WEB页面的同时检索其内的超链接并加入扫描队列[6]等待以后扫描。因为WEB中广泛使用超链接,所以一个Spider程序理论上可以访问整个WEB页面。

为了保证网络爬虫遍历信息的广度和深度需要设定一些重要的链接并制定相关的扫描策略。

2 中文分词与索引引擎

网络爬虫将遍历得到的页面存放在临时数据库中,如果直接查询数据库中的信息,响应速度将会难以忍受。为了提高检索效率,需要建立索引[3],将索引按照倒排文件的格式存放。同时如果索引不及时跟新的话,用户用搜索引擎也不能检索到。

用户输入搜索条件后搜索程序将通过索引数据库进行检索然后把符合查询要求的数据库按照一定的策略进行分级排列并且返回给用户。

3 Web应用与搜索

用户一般通过浏览器进行搜索,这就需要系统提供Web服务器[5]并且与索引数据库进行连接。如今,搜索引擎应用不只局限于PC端,在移动端也有巨大的市场前景。所以一个良好的搜索引擎应用最好是基于Web的,而且容易跨平台。而且搜索引擎应用要能保障搜索结果的快速和准确,当客户在浏览器中输入查询条件,Web服务器接收到客户的查询条件后在索引数据库中进行查询然后科学快速地进行结果排序,并返回给客户端。

2.3 搜索引擎的主要指标及分析

搜索引擎的主要性能指标有召回率、准确率、相关度和响应时间等,这些指标决定了搜索引擎本身的技术指标。而搜索引擎的技术指标进一步决定了搜索引擎的评价指标,好的搜索引擎至少应该具有较快的反应速度、较高准确率和召回率,这些都需要搜索引擎技术指标来保障。

召回率:一次搜索结果中符合用户要求的数目与用户查询相关信息的总数之比。

准确率:一次搜索结果中符合用户要求的数目与该次搜索结果总数之比。

相关度:用户查询与搜索结果之间相似度的一种度量。

精确度:对搜索结果的排序分级能力和对垃圾网页的抗干扰能力。

2.4 小结

本章对基于因特网的搜索引擎的结构和性能指标进行了分析,在这些研究的基础上利用Java技术和一些Open Source工具实现了一个简单的搜索引擎——中文网络搜索引擎。在接下来的几章里将会就爱搜的设计进行详细的分析。

 

3.相关技术简介

3.1 核心技术简介

Java EE[5] 是在 Java SE 的基础上构建的,它提供Web 服务、组件模型、管理和通信 API,可以用来实现企业级的面向服务体系结构(service-oriented architecture,SOA)和 Web 2.0[5]应用程序

Spring[5]是一个开源框架,是为了解决企业应用开发的复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为 J2EE 应用程序开发提供集成的框架。同时Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。Spring的核心是控制反转IoC)和面向切面(AOP)。简单来说,Spring是一个分层的Java SE/EE full-stack(一站式) 轻量级开源框架。

3.2 数据库操作技术

1.MyBatis数据持久化

MyBatis 本是apache的一个开源项目iBatis, iBatis是一个基于Java的持久层框架。iBATIS提供的持久层框架包括SQL Maps和Data Access Objects(DAO)。

2.C3p0数据库连接池

C3P0是一个开源的JDBC[2]连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。目前使用它的开源项目有Hibernate,Spring等。

3.Redis

Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。从2010年3月15日起,Redis的开发工作由VMware主持。从2013年5月开始,Redis的开发由Pivotal赞助。

3.3 规范化开发平台

项目管理,Maven是基于项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的软件项目管理工具。Maven 除了以程序构建能力为特色之外,还提供高级项目管理工具。 由于 Maven 的缺省构建规则有较高的可重用性,所以常常用两三行 Maven 构建脚本就可以构建简单的项目。

开发平台,IntelliJ是一款综合的Java 编程环境, 被许多开发人员和行业专家誉为市场上最好的IDE。它提供了一系列最实用的的工具组合:智能编码辅助和自动控制,支持J2EE,Ant,JUnit和 CVS集成,非平行的编码检查和创新的GUI设计器。IDEA把Java开发人员从一些耗时的常规工作中解放出来,显著地提高了开发效率。具有运行更快 速,生成更好的代码;持续的重新设计和日常编码变得更加简易,与其它工具的完美集成;很高的性价比等特点。

3.4 整体Web架构

RESTFul[4]是一种软件架构风格,设计风格而不是标准,只是提供了一组设计原则和约束条件。它主要用于客户端和服务器交互类的软件。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。

面向服务的体系结构(Service-oriented architecture)是构造分布式计算的应用程序的方法。它将应用程序功能作为服务发送给最终用户或者其他服务。它采用开放标准、与软件资源进行交互并采用表示的标准方式。

客户端-服务端分离架构,其中客户端主要实现UI界面和用户交互,服务端主要实现业务逻辑,客户端和服务端采用约定的标准接口传递数据。

 

  1. Pingback: 爱搜-网络爬虫 - 爱上走路

  2. Pingback: 爱搜-中文分词 - 爱上走路

  3. Pingback: 爱搜-结语 - 爱上走路

  4. Pingback: 爱搜-web应用与搜索 - 爱上走路