基于Solr的企业级搜索引擎的设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于Solr的企业级搜索引擎的设计
作者:赵凯王敏
来源:《电子世界》2013年第22期
【摘要】分散的计算机上存储有大量的信息,企业级用户急需一种工具对这些零散的信息进行统一的查找,最好还可通过配置对特定的网站进行检索,这就是企业级搜索引擎,本文使用开源项目Solr设计了一款面向企业的搜索引擎。
整体设计基于SSH设计框架实现;服务器端采用Heritrix抓取网页,加入IKAnalyzer增加中文分词功能;客户端采用Ajax技术实现异步通信,优化用户体验。
【关键词】Solr;Heritrix;SSH;企业级;搜索引擎
1.研究背景
随着Intenet的普及与企业信息化步伐的不断加快,在企业信息化的发展趋势下,越来越多的企业广泛地应用Intemet技术实现数据共享、业务集成与信息发布,信息内容也正在以惊人的速度增加。
文件、图片、多媒体等非结构化数据存放零散,而企业内部业务系统有大量的
结构化数据,如报表与业务功能,有时候要找到它们如同大海捞针,如果不及时解决这个问题,很多原来有价值的信息无法得到企业的有效利用。
目前许多企业级门户网站建立搜索引擎服务通常通过调用互联网搜索引擎的搜索服务,来实现对本站点的搜索。
但是对于一个有很多子网站的企业门户网站来说,通用搜索引擎存在着很多缺陷,满足不了这种搜索服务要求,如:尽管通用引擎提供对指定站点内的查询,但是不能同时对多个站点同时查询;通用搜索引擎不能及时更新索引,会导致搜索结果不全和出现“坏链接”;调用通用搜索引擎的响应速度慢。
总之,通用搜索引擎有很广的信息采集面,深度不够,它采取的是广度优先采集策略,而企业搜索需要深入挖掘与企业相关的所有信息,因此应采用深度优先的采集策略,同时由于某些行业网站或数据库的信息是动态更新的,而且更新频率很高,需要更频繁的抓取这些信息,因此企业搜索引擎正是应这种需求而产生。
研究如何设计一个适用于企业信息检索的搜索引擎,具有重要的意义。
文中采用
Struts+Spring+Solr+Heritrix+IKAnalyzer的开发工具包,进行了一个中文全文搜索引擎的设计。
2.技术路线
2.1 总体架构
该搜索引擎搜索部分框架可概括为Heri trix+Solr+IKAnalyzer,如图1所示。
实现方案中,把Solr作为处理搜索结果的源和入口,Heritrix负责它最擅长的工作:抓取网页内容。
使用Solr作为搜索后端,可以充分使用Solr的搜索特性:查询拼写检查,搜索提醒,数据复制及查询缓存等。
考虑到Solr本身中文分词功能较弱,因此引用IKAnalyzer来增强其中文分词功能。
鉴于企业级搜索引擎需要部分定制功能,例如,可能会需要设定访问一些企业本身感兴趣的网站,以提高搜索的速度和精确度,因此需要配置系统维护接口,实现人工的实时定制。
Solr本身提供了灵活的特性,能够从文本、数据库和网页中直接导入数据,而企业本身也需要对检索到的信息进行整理分类,会希望搜索引擎能够提供一些人工智能和个性化的东西,因此在设计中加入了数据库的支持,以实现对网页内容的学习、分析和聚类等,从而可保证提供智能化结果。
2.2 设计框架
系统设计采用基于SSH框架的三层结构,即表现层、业务层、持久层。
其中表现层使用struts框架,该层将直接面向用户,精美的UI将能够体现良好的可用性,本次设计用使用了开源的Yui-ext界面包,可增加弹窗、菜单等效果;使用的Ajax技术实现异
步通信功能,提升用户的体验;利用struts框架与Yui-ext相结合,Yui-ext进行前台数据显示,而struts框架作为数据跳板向前台提供数据。
业务层使用spring框架,该层作为持久层数据与表现层之间数据传输的纽带,spring框架封装了DAO和JDBC模块,可以保持数据库访问代码干净简洁,并且可以防止因关闭数据库资源失败而引起的问题。
持久层使用Hibernate框架,目前,已经很少有人J2EE应用会直接以JDBC方式进行持久层访问,毕竟用面向对象的程序设计语言来访问关系型数据库令人沮丧;反之,多数人会以ORM框架来进行持久层访问,其中Hibernate框架灵巧、轻便,非常适用于持久层。
3.关键技术
3.1 Solr简介
Solr是Apache的一个开源子项目,它是一个采用java5开发的、基于lucene全文搜索库的企业级搜索服务器,提供了丰富的查询语言,可根据用户需求配置和扩展,并对查询性能进行了优化。
Solr提供了一个完善的功能管理界面,可输出多种格式,能够实现异构系统的整合,有强大的插件功能,使用它很容开发出一款优秀的企业级搜索引擎。
3.2 Heritrix与Solr的整合
Heritrix与Solr的配置主要集中在服务器端,整个搜索的过程可以概括为,Heritrix爬虫抓取网页之后,编写相应的代码对爬虫抓取页面的遍历,将网页传递给JoyDoc框架,获取页面中的content,source,title等信息,建立数据库,然后使用Solr索引功能对网页数据库中的数据建立索引,从而实现全文搜索。
其中,需要重新定制heritrix的Extractor方法,配置Heritrix 根目录下的conf文件中的Heritrix文件。
3.3 Struts+Spring+Hibernate的整合
SSH框架的整合直接影响到整个网站的用户体验和可用性,整合主要以下两个方面。
Struts整合Spring,可以将Struts Action管理委托给Spring框架,整个过程需要两个步骤:
(1)Action中,使用IOC获得服务,配置struts-config.xml;
(2)Spring配置文件中注册该动作。
Spring整合Hibernate,在Spring框架中,像JDBC DataSource或Hibernate SessionFactory 这样的资源,在应用程序上下文中可以用bean实现。
需要访问资源的应用程序对象只需通过bean引用得到这类预先定义好的实例的引用即可,需要三个步骤:
(1)配置数据源,一般情况下有三种方式的数据源;
(2)配置sessionfactory;
(3)配置事务。
3.4 中文分词技术
中文分词对于搜索引擎来说是至关重要的指标,对于企业来说,绝大部分的搜索时针对中文索引,而Solr默认只支持引文索引,因此需要加入中文索引。
IKAnalyzer实现了以词典分词为基础的正反向全切分算法,适合于大部分用户的搜索习惯,如搜索时使用“人民”即可涵盖带有“人民币”的文章。
对Solr加入中文索引,需要将IKAnalyzer的jar包导入/Tomcat 6.0/webapps/solr的lib里,然后在solr/conf/schema.xml中节点下添加个类型,从而实现索引和查询的中文分词。
4.结语
企业级搜索引擎目前发展还不完善,本文采用开源的Solr作为构建企业级搜索引擎的核心,定制了网络爬虫Heritrix的Extractor方法,在单台服务器上实现了一款基于SSH设计框架的企业级搜索引擎,具有一定的使用价值。
如果进一步增加网络设备,可实现基于Solr的分布式的垂直搜索引擎,进行实际使用和推广。