基于SSH的图书搜索系统的研究与实现

 2022-01-17 11:01

论文总字数:24214字

目 录

1引言 1

1.1 项目背景 1

1.2 项目意义 1

2技术简介 1

2.1 SSH简介 1

2.1.1 struts 1

2.1.2 hibernate 2

2.1.3 spring 2

2.2 jsp Jquery 2

2.3 lucene和HtmlParser的开源工具 2

2.4 IKAnalyzer分词器 2

2.5 网络爬虫 3

2.6 开发环境 3

3系统设计 3

3.1需求分析 3

3.1.1 功能需求 3

3.1.3 可用性及可靠性需求 5

3.2 系统架构设计 5

3.3 系统的模块化设计 6

3.3.1 用户注册模块 6

3.3.2 用户登录模块 7

3.3.3 用户搜索模块 8

3.3.4 索引模块 9

3.3.5 图书管理模块 10

3.3.6 角色管理模块 10

3.3.7 用户管理模块 10

3.3.8 爬虫管理模块 11

4数据库设计 11

4.1 用户表 11

4.2 权限表 12

4.3 角色表 13

4.4 用户角色表 14

4.5 角色权限表 14

4.6 图书表 15

4.7 条件表 16

5系统的编码实现 17

5.1 登录界面 17

5.2 注册界面 18

5.3 用户搜索界面 20

5.4 后台管理模块 23

5.4.1 图书管理模块 25

5.4.2 用户管理模块 26

5.4.3 角色管理实现 28

5.4.4 爬虫管理实现 28

5.4.5 个人设置 29

6系统的涉及算法和性能优化 30

6.1 搜索优化 30

6.1.1 lucene和数据库的性能对比 30

6.1.2 跳跃表算法 30

6.1.3 文本相关性算法(tfIdf) 31

6.1.4 倒排索引数据结构 32

6.2 爬虫优化 33

6.2.1 生产者消费者模式 33

6.2.2 生产者消费者模式实现 34

6.3 分词优化 36

6.3.1 正向迭代最细粒度切分算法 36

6.3.2 smart模式和非smart模式(分词消岐) 37

6.3.3 字典可扩展 38

7总结 38

参考文献 39

致谢 40

1引言

1.1 项目背景

Internet是世界上规模最大、用户最多、影响最广的一个全球化的、开放性的互连网络,它蕴藏着丰富的信息资源,提供多种信息服务如E-mail,FTP,Telnet,Usenet等等。World Wide Web(WWW、Web或万维网)为这些服务提供了统一的接口,并利用超链接技术在Internet上构建了一个庞大的信息网,使用图形化用户界面为每一位上网者提供方便的信息查询和信息浏览服务。为了满足用户迅速、全面、准确查找信息的要求,一些搜索引擎如Google、Yahoo等对网面进行索引和分类。它们通常使用spider或crawler根据网页间的超链接关系对静态网页进行抓取、存储、分类和索引。但这类传统搜索引擎却无法抓取动态产生的Web页面,无法获取数据库中的信息,而这些信息往往在质量和数量上都是前者所无法比拟的。因此搜索引擎能够索引到的信息只是网络中的一小部分,而这些搜索引擎搜索不到的信息绝大部分都包含在大型站点里面,所以找出能够方便的挖掘这些深层数据的方法和策略是很有必要的。

1.2 项目意义

在目前人们普遍只会使用搜索引擎来查询信息的时代,很显然有很大一部分信息将不会被检索到,这些专业的垂直领域的知识都不能被人们有效的利用到,这无疑是一个很大的浪费,不仅仅是白白的浪费这些信息资源,同时人们的搜索要求也得不到满足,往往人们需要更精确,更仔细的信息反馈,而搜索引擎的局限性根本就不能满足人们日益增长的搜索需求,所以本系统针对这一情况,以图书领域的电子商务网站这些载有大量动态,结构化数据的大型站点为目标,对其中不能被搜索引擎搜取到的数据进行深度垂直的挖掘。用户可以通过本系统看到来自不同网站的图书,用户可以通过搜索高效迅速的看到图书的详细情况,并可以比较来自于不同网站图书的优缺点,对于那些有特殊搜索需求的用户是极为方便的。

2技术简介

2.1 SSH简介

2.1.1 struts

struts是一款MVC模式的框架[1],是Apache软件基金会赞助的一个开源项目,本系统使用的2.2版本,所谓的MVC模式就是显示与逻辑完全分离,struts允许使用普通的java对象来做为自己的控制器,支持更多的视图技术,不仅仅是jsp,且有完善的拦截器机制,和易使用的输入校验功能,这些好处对于本项目来说毫无疑问都是非常需要的。

2.1.2 hibernate

hibernate 是一款ORM框架[2],也就是对象映射框架,目前的主流数据库都是关系数据库,而java是面向对象的语言,所以直接将java和数据库拥在一起的时候会相当麻烦,而hibernate将JDBC的底层全都封装了,将数据库里的表与java的对象进行了映射,让java像操作自己的对象一样才操作数据库的表。

2.1.3 spring

spring框架是2003年由Rod Johnson开发的,这是一个轻量级的框架,它抽取了大量企业开发中重复的步骤,抽象出一个通用步骤,大大的提高了企业的开发效率,spring的核心是IOC(控制反转)[3],这个特性将程序中的对象关系转移到程序之外的配置文件上。

2.2 jsp Jquery

jsp全名Java Server Pages ,java服务器界面,这项技术是在普通的html界面里面插入java片段,而且用jsp写的页面是在服务器端执行的,返回到浏览器的是纯文本html。

jquery 是一款优秀的js库,它兼容css。有丰富的插件资源,这项技术能够让html的页面代码与脚本代码分离,不再需要程序员在界面插入一大堆js来调用界面元素,这项技术使得界面变得更加美妙,使得开发人员变得更加便利。

2.3 lucene和HtmlParser的开源工具

Lucene是Apache软件基金会的子项目,完全开源的全文搜索工具包,Lucene并不是一个完整的搜索引擎的项目,他的出现是方便别的项目里面嵌入搜索功能,Lucene有一套简单但是异常强大的API接口,正是因为这些,它才可以很容易的无缝嵌入项目中去。而且Lucene的索引使用的倒排数结构,实现分块索引,极大地提高了索引的速度,搜索起来非常迅速,而且能够将java对象转化成自己的文档对象,更有利于搜索。最重要的一点,lucene的搜索的精确度非常高,它通过一系列内置的评分算法,对搜索结果进行预排序,会返回精准度比较高的结果。

HtmlParser 是一款完全由java写成的解析html的工具,HtmlParser特别轻量级,能够既快又迅速的对html界面进行信息提取和信息转换。

2.4 IKAnalyzer分词器

IKAnalyzer是IKAnalyzer 这是一款开源的,基于java的分词工具包,2006年推出第一版,刚刚推出的时候这个工具包是以Lucene框架为载体的,服务于Lucene,是Lucene配套的词法分许和文法分析的工具包,但是从3.0版本开始,因为发展的十分迅速和火爆,马上独立出lucene变成java的公用分词组件,这个分词器不但对中文对着很好的支持,也兼容韩文,日文,是一款非常棒的中文分词器。

2.5 网络爬虫

网络爬虫从根本上不是一项技术,它是一种技术的统称,爬虫就是通过给定URL种子链接,然后遵循一定规则自动的爬取网页站点数据的程序或者脚本。有很多种爬虫,一般的爬虫都是通过初始URL连接,然后通过爬取到的初始界面提取链接,然后将提取的链接作为种子继续抓取,直到满足一定的停止条件,另外一种是聚集爬虫也可以说是主题爬虫,这种爬虫会通过过滤出包含主题关键字的信息从来对网页进行有选择的抓取,而本系统的使用的是垂直领域的特殊爬虫,这种爬虫的针对性不强,他只针对于他所要抓取数据的类型,本质上和主题爬虫差不多,但是针对性还要强一点。

2.6 开发环境

本系统运用的是Eclipse Release 4.3.0 jdk1.7 tomcat7.0 mysql 5.6.22。

Eclipse 是一款非常好用的java开发的IDE工具,跨平台,源代码开放,eclipse不但是一个集成开发环境,也是一个工具集成开发平台,通过插件开发允许eclipse开发人员开发能与Eclipse无缝对接的工具,可以说对于java开发者来说,eclipse是一个绝佳的开发工具。

Tomcat是Apache软件基金会的一个核心项目,他是一款轻量级的web应用服务器,因为免费,技术先进,性能稳定,所以称为比较主流的应用服务器,你把自己的项目布置在Tomcat上,启动Tomcat,在浏览器上输入你项目的本机地址就可以像浏览网页一样来浏览你的醒目。

JDK是java的语言工具开发包[4],里面包含了java的官方类库,任何用java语言写的项目都必须安装JDK。

Mysql是时下比较流行的关系型数据库,由瑞典公司Mysql AB 公司开发,现属于Oracle公司旗下,该数据库体积小,成本低,速度快并且开源,这对于中小型项目来讲是非常合适的,所以本系统选用mysql作为数据库支撑。

3系统设计

3.1需求分析

3.1.1 功能需求

功能需求是针对用户系统必须拥有的功能[5],本系统的功能需求如下:

  • 用户注册功能

在用户的登录界面上会有注册按钮,如果是第一次登录系统就会提示用户先注册,点击注册按钮,跳转到注册界面,需要填用户名、密码、验证码等字段,然后每个空都会有自己的校验。且填完用户名这一栏过后,系统就会异步请求后台看用户名是否已存在如果已存在就会提示用户重新输入,验证码是为了防止恶意程序高频反复进行登录操作。如果注册成功,数据库的用户表就会增加一条记录,界面也会显示注册成功并且会自动跳转到用户登录界面。

  • 用户登录功能

在用户的登录界面,需要填用户名、密码和验证码,验证码同样是为了防止恶意程序,同时界面也有防止用户输入不当的校验,比如不能为空等校验,提交至后台,在数据库里进行查询。如果查询不到,提示用户用户名或密码输入有错误,如果查询到了就直接跳转至系统主界面。

  • 用户管理功能

该功能是针对于有管理员权限的用户来说的,该功能是对用户的增删改查,用户的信息发生改变,管理员可以在后台管理界面手动对用户信息进行修改,也可以手动增加,删除用户。

  • 角色管理功能

因为有的操作必须特定的人来进行操作,不然会权限滥用,导致系统时刻处于不安全的境地,比如如果不设权限,用户可以随意更改数据库的数据,那么系统就会导致大混乱,所以必须配上角色管理功能模块,这样可以给用户配上相应的权限,这样只有特定权限的人才能进行特殊的操作,这在安全上无疑增加了很多的保障。

  • 图书管理功能

爬虫爬过来的网页经过解析工具解析成的,所以这些图书数据不是自己手动输入的数据,也学会发生偏差,也许有的数据是错误的,所以必须增加图书管理功能,对这些数据进行必要的管理,手动删除图片,手动更改图片。

  • 爬虫功能

该功能是通过爬虫程序以及种子入口,再加以搜索条件,将符合条件的页面抓取下来,然后通过解析工具将网页中的数据解析出本地的结构化数据,然后存入数据库并在lucene模块中存入索引,这个爬虫就是本系统数据的主要来源。所以这可以说是本系统的核心功能。

  • 普通搜索功能

用户普遍使用的都是使用关键词的搜索,这是最普遍的搜索方式,但是如果数据量大的话直接利用数据库的like语句搜索,会引起全表扫描,导致非常慢,所以这个普通搜索功能必须集精度与广度于一体,采用lucene这个搜索工具包无疑是一种好的选择。

  • 高级搜索功能

用户也许会对关键词的精度不满意,那么就必须诞生高级搜索功能,这个高级搜索功能是通过多个条件的限制,缩小搜索的范围,可以得到更加精确的结果,但是也不能使用过多的条件限制,这样会增加搜索的难度。

  • 索引功能

这个功能是提升用户体验最核心的功能,因为当今的搜索体验,最主要的一点是就是反应迅速,不然相当慢的反应速度注定会使你的用户流失,所以提高反应速度的功能必须要有,索引功能就提上日程了,选择Lucene的索引结构能够极大的提高搜索效率。

  • 性能需求

就搜索而言,响应速度影响的太大,所以必须保证响应速度在用户的可接受范围之内, 而且后台解析网页和转换成数据库结构化数据的时间也不能过长,也必须控制在一定的时间范围之内。同时因为会定时的解析数据,也许会遇到一样的数据记录,所以这里必须进行判断,不然造成数据库的数据冗余浪费内存。

3.1.3 可用性及可靠性需求

因为这是个java web 项目,所以依赖其不受平台影响的特性,可以做到多平台移植,所以本系统会尽量将配置文件做到平台不依赖。还有系统中需要使用多线程,所以需要注意多线程安全的问题。对数据库的操作一定要放在事务管理之内,不然有可能出现数据不一致,数据异常的情况。

3.2 系统架构设计

本系统运用的struts hibernate spring这三种开源的框架组成的架构,用jsp技术来充当表现层负责与后台进行交互,将数据可视化的展现给用户,控制器由Struts来充当,负责转发前台的要求,将前台具体的要求转发给具体的业务逻辑,业务层有普通JavaBean来构成,数据访问层采用hibernate这个orm框架,这个负责与数据库进行通讯,数据库采用mysql数据库。

图3.1展示了本系统的架构设计:

图3.1 图书搜索系统架构图

剩余内容已隐藏,请支付后下载全文,论文总字数:24214字

相关图片展示:

您需要先支付 80元 才能查看全部内容!立即支付

该课题毕业论文、开题报告、外文翻译、程序设计、图纸设计等资料可联系客服协助查找;