搜索引擎中Spider的可扩展性设计
来源:互联网 发布:linux操作系统入门教程 编辑:程序博客网 时间:2024/05/20 23:58
垂直搜索是针对某个行业的专业搜索引擎,是搜索引擎的细分和延伸,是对网页库中某类专门的信息进行整合,定向分字段抽取出需要的数据处理后再以某种形式返回给用户。Spider是搜索引擎中的核心技术之一。垂直搜索引擎对Spider提出了动态、可扩展和可配置的高要求。使用策略模式可实现一种高可扩展、面向接口的Spider。
1 工作原理
网络蜘蛛工作方式为:查看一个页面,并从中找到相关信息,然后它再从该页面的所有链接中出发,继续寻找相关的信息,以此类推。Web文档索引根据文档标题、首段落甚至整个页面内容进行,取决于搜索服务的数据收集策略。网络蜘蛛漫游过程中,根据页面标题、头、链接等生成摘要放在索引数据库。网络蜘蛛为实现快速浏览整个互联网,通常采用多线程技术实现在网上搜索信息。
2 策略模式
为设计可扩展Spider,应使各功能部件可装配化,须通过软件设计模式优化各部分的接口形式。
策略模式(Strategy、Policy)[1]针对一组算法,将每个算法封装到具有共同接口的独立的类中,使它们可相互替换。策略模式使算法可在不影响客户端的情况下发生变化。
使用策略模式可把行为和环境分割开来。环境类负责维持和查询行为类,各种算法则在具体策略类(Concrete Strategy)中提供。由于算法和环境独立,算法的增减、修改都不影响环境和客户端。当出现新的促销折扣或现有的折扣政策出现变化时,只需要实现新的策略类,并在客户端登记即可。策略模式相当于“可插入式(Pluggable)的算法”。
图1 策略模式典型结构
策略模式提出后,在各种语言及平台上又出现了各自的策略模式实现方法。
在C++中,Alexandrescu比较“多继承”和“模板”技术,揭露了两者的本质,最终采用模板技术实现策略模式,并在其Loki代码库中大量使用这项技术[2]。这种策略模式的设计具备如下形式:
Template <class CreationPolicy>
Class WidgetManager: public CreationPolicy
{…};
客户端具体化具备如下形式:
typedef WidgetManager<OpNewCreator<Widget>>
MyWidgetMgr;
在java平台,IoC/DI机制,即控制反转(IoC:Inversion of Control)或依赖注射(DI:DependenceInjection)是Spring框架的核心。IoC是由容器控制组件间的关系,而非传统实现中由程序代码直接操控,这种控制权由程序代码到外部容器的转移。DI是对IoC更形象的解释。即由容器在运行期动态地将依赖关系(如构造参数、构造对象或接口)注入到组件中。
3 基于策略的Spider设计
垂直搜索引擎特点是“专、精、深”,且具有行业色彩,相比较通用搜索引擎的海量信息无序化,垂直搜索引擎则显得更加专注、具体和深入。垂直搜索引擎对搜索主题、搜索策略等要求更高的可变性和可扩展性。总结策略模式思想,使用Spring和策略模式实现可扩展的Spider。
将Spider功能部件和涉及数据抽象为如图所示5个接口:
图2 策略Spider接口间关系
(1) IParser:抽象解析器,接收由IHtmlGetter传递来的网页,并使用IMatcher解析;
(2) IWriter:抽象写入器,将解析结果进行保存,数据库或文件; (3) IData:类似ResultSet的行列式数据集,在IParser与IParser间、IParser与IWriter间传递; (4) IMatcher:抽象匹配器,可由正则表达式实现; (5) IHtmlGetter:抽象网页获取器。 其中解析器、写入器和匹配器接口设计如下: public interface IParser { public IData parse(IData data); } public interface IWriter { public void write(IData data); public void open(); public void close(); } public interface IMatcher { Listmatch(String source,String pattern,int groupNum); } 使用Spring的依赖注入将各部件拼装起来(实现类HtmlGetterImpl等不赘述): <bean id="HtmlGetter" class="edu.jju.web.HtmlGetterImpl"> <bean id="SubjectParser" class=" edu.jju.parser.SubjectParserImpl"> <property name="htmlGetter"> <ref bean="HtmlGetter"/> </property> <property name="matcher"> <ref bean="RegexMatcher"/> </property> … </bean> 4 结语 研究了搜索引擎的工作模式,对Spider各功能进行高度抽象,并使用策略模式对其进行可扩展性设计。使得Spider能够在搜索主题、搜索策略上高度可装配和可扩展,能适应垂直搜索引擎对搜索主题等参数的高可变性需求。 参考文献: [1] Erich Gamma, Richard Helm, Ralph Johnson, JohnVlissides.Design Patterns: Elements of Reusable Object-Oriented Software [M]. Addison-Wesley,1995. [2] Andrei Alexandrescu, Modern C++ Design: GenericProgramming and Design Patterns Applied [M].Addison Wesley, 2001.
- 搜索引擎中Spider的可扩展性设计
- 以搜索引擎Spider的视角设计网页
- 可扩展性数据库的架构设计
- 可扩展性数据库的架构设计
- 可扩展性数据库的架构设计
- 来自 Dropbox 的可扩展性设计经验
- 可扩展性设计(-)
- 工作流实施中FlowPortal.net对于表单设计易用性和可扩展性的考虑
- HANA的可扩展性
- java的可扩展性
- 可扩展性设计模式(zz)
- 可扩展性设计模式(zz)
- 可扩展性程序的提纲
- Facebook的可扩展性体系结构
- 什么是系统的可扩展性?
- 基于spring的可扩展性
- 可扩展性的页面布局
- 可扩展性设计之数据切分
- MFC程序中如何实现自定义消息
- action中属性forward和子元forward的区别
- 基于多框架的J2EE快速开发方法
- 使用javascript通过className来获取元素
- 闪联:DLNA之外的存在理由
- 搜索引擎中Spider的可扩展性设计
- 重载new 和 delete 操作符
- 日终批处理中使用的sql
- 用VB如何计算单条语句运行时间
- struts2中数据校验1
- GridView排序问题
- 盖茨留给职场青年的十句警言
- 如何开始学习JSP
- oracle复制表的sql语句