基于Lucene的搜索引擎技术在综合查询系统中的应用

2017-03-06 00:24]王子光王子明
软件导刊 2017年1期
关键词:源文件工具包爬虫

]王子光+王子明

摘要摘要:搜索引擎技术应用广泛。Lucene作为一个优秀的搜索引擎开源工具包,可方便实现相关搜索引擎功能。介绍了Lucene搜索引擎工具包,在此基础上,利用Lucene开发工具包,设计并实现了综合查询系统中搜索引擎功能。阐述了网络爬虫子系统、索引子系统和查询子系统3个模块功能。

关键词关键词:搜索引擎;网络爬虫;Lucene技术;Suggestion提示

DOIDOI:10.11907/rjdk.1511256

中图分类号:TP319文献标识码:A文章编号文章编号:16727800(2017)001012603

引言

随着互联网技术的迅猛发展,形成了海量Web交互数据,搜索引擎成为用户在海量数据中获取有用信息的重要技术手段。综合查询系统作为当前管理信息系统的重要组成部分,承担了系统查询的大部分功能,是用户进行查询的重要接口。综合查询系统包括快速查询、模糊查询、组合查询、关联查询等功能,一般是用户根据查询要素进行查询,例如输入某人的学号来查询确切信息。但是在很多查询场合,用户往往不清楚自己所掌握的数据是哪一个查询要素,例如只知道一个编号,但是不清楚这个编号是学号还是其它编号,这样就无法根据查询要素查询,导致查询效率大大降低。综合查询系统迫切需要一种类似搜索引擎的服务来方便用户使用。

本文设计了一种基于Lucene的搜索引擎技术在综合查询系统的应用方案,并详细阐述了该方案的设计与实现。

1Lucene开发工具包

Lucene作为一个优秀的搜索引擎开源工具包,可以4结语

代码质量问题已成为制约软件持续发展的主要因素。代码质量问题包括多个方面,但特征不够明确和统一,自动检测效果差,这些都为代码质量检查增加了难度[7]。可控性作为代码质量评价的重要指标,越来越受到信息企业的关注[8]。它在整个产品线的长远发展方面发挥着重要作用,有助于构建完整的软件产品“生态系统圈”。可控性不仅是代码质量理论,更需要应用在程序编码实践之中。遵循可控性原则进行方案设计和代码实现,可进一步提高代码质量,监督控制程序代码修改的风险,增加软件产品应对需求变化的灵活性。

2基于Lucene的搜索引擎技术实现2.1网络爬虫设计与实现

网络爬虫是通过网页的链接地址来寻找网页信息,通常从网站的首页开始读取网页内容,从中抽取网页中的超链接地址,然后通过这些链接地址寻找下一个网页,如此循环,直到把网站所有的网页都抓取为止[2]。搜索策略包括广度优先或深度优先两种形式。

网络爬虫根据抓取过程分为3个功能模块:①网页源文件获取。通过获取网页的输入流,将网页源文件信息提取出来;②网页超链接地址抽取。这个模块就是分析网页信息,抓取URL列表;③网页文件写入磁盘。这个模块主要是将网页数据写入磁盘,然后进行索引查询。

2.1.1网页源文件获取

通过与指定URL链接,获取网页输入流,然后逐字符把网页源文件输入到一个字符串变量中。这一部分用到Java.net包下的URL类和URLConnection类,主要代码如下:

.1.3网页源文件写入磁盘

因为文件名不能包括“/”等特殊字符,所以这部分要利用StringTokenizer类把每个获得的超链接以“/”分隔,然后按照分隔出来的字符串依次建立相应的文件夹。例如:www.xxx.edu.cn/english/index.asp依次创建www.xxx.edu.cn文件夹,然后是其子文件夹english,最后是最内层文件夹index.asp,还要创建一个FileWriter对象把网页源文件index.asp写入到最内层的文件夹中。

实现网络爬虫功能后,网页数据就写入磁盘,然后索引子系统要对这些网页源文件进行索引。

2.2索引子系统设计与实现

由于经过网络爬虫搜集的数据是在数据库中存储的,所以需要利用Lucene对数据库中的数据进行索引。有两种方式实现创建索引:①实时索引。在信息系统添加数据时就为该数据添加索引;②定时创建索引。文件为配置时间,在指定时间创建索引。索引完后就可以在索引文件中进行查询,把结果返回给用户。

2.2.1实时创建索引

实时创建索引是业务系统在增加数据时为新数据添加索引。本文设计实现了一个创建索引的公共方法createIndex,参数为新增加的数据对象。在该方法中使用Lucene搜索引擎包提供的IndexWriter对象向索引文件夹中写入索引文件。创建索引时先从配置文件中读取索引文件夹位置,判断索引文件夹中是否存在索引文件。如果不存在则直接在索引文件中写数据,如果已经存在,则向索引文件夹追加数据并不覆盖原有数据;然后使用addDocument方法,把要索引的数据库字段放到Document对象的Field中。Document很像数据库中的一条记录,而Field更像是数据库中的字段[3]。

2.2.2定时创建索引

实时创建索引目的是将新增数据添加到索引文件中,但此时删除数据索引文件并不会立即更新。为了解决上述问题,可设计实现一个定时创建索引方法。为了不影响业务正常开展,一般设定为次日凌晨,在该时间为数据库中的所有数据信息重新创建索引。

在Web应用程序的web.xml配置文件中设置一个ServletContextListener,并在ServletContextListener实现类中创建一个Timer对象,调用Timer对象的schedule方法实现在指定时间执行指定任务。

定时调度任务需实现一个方法,该方法继承java.util.TimerTask类。从配置文件中读取指定时间,设定两个配置项,一个是索引文件夹路径,一个是任务指定执行时间。通过JDom技术读取配置文件中的信息。由于ServletContextListener在整个Web应用程序中都存在,这样就实现了定时创建索引的功能。

创建完索引后,就可在索引文件中查找用户关注的信息,将用户查询结果返回给客户端。

2.3查询子系统设计与实现

前台实现参照Google搜索引擎的Suggestion提示,通过Ajax技术与后台动态交互数据,并利用JQuery的Autocomplete 插件实现类似Google输入框中动态显示搜索词组下拉列表功能。搜索语句代码如下:

参考文献:

[1]郎小伟,王申康.基于Lucene的全文检索系统研究与开发[J].计算机工程,2006(4):110.

[2]互动百科,网络蜘蛛[EB/OL].http://www.baike.com/wiki/网络蜘蛛.

[3]李刚,宋伟,邱哲.征服Ajax十Lucene构建搜索引擎[M].北京:人民邮电出版社,2006.

[4]成龙.Lucene搜索引擎开发进阶实战[M].北京:机械工业出版社,2015.

[5]羅刚.解密搜索引擎技术实战[M].北京:电子工业出版社,2014.

[6]王子光.内蒙古移动需求全生命周期系统的设计与实现[D].北京:北京交通大学,2010.

[7]李刚.疯狂Ajax讲义[M].北京:电子工业出版社,2013.

责任编辑(责任编辑:杜能钢)

猜你喜欢
源文件工具包爬虫
Epigallocatechin-3-gallate exerts antihypertensive effects and improves endothelial function in spontaneously hypertensive rats
利用网络爬虫技术验证房地产灰犀牛之说
基于Python的网络爬虫和反爬虫技术研究
网络社区划分在软件质量问题分析中的应用
基于源文件可疑度的软件缺陷定位方法研究
利用爬虫技术的Geo-Gnutel la VANET流量采集
大数据环境下基于python的网络爬虫技术
LKJ基础数据源文件自动编制系统的研究
Microchip推出PIC32蓝牙入门工具包
误写C源文件扩展名为CPP的危害