搜索引擎中Spider的可扩展性设计

来源:互联网 发布:linux操作系统入门教程 编辑:程序博客网 时间:2024/05/20 23:58
0  引言

垂直搜索是针对某个行业的专业搜索引擎,是搜索引擎的细分和延伸,是对网页库中某类专门的信息进行整合,定向分字段抽取出需要的数据处理后再以某种形式返回给用户。Spider是搜索引擎中的核心技术之一。垂直搜索引擎对Spider提出了动态、可扩展和可配置的高要求。使用策略模式可实现一种高可扩展、面向接口的Spider

1  工作原理

网络蜘蛛工作方式为:查看一个页面,并从中找到相关信息,然后它再从该页面的所有链接中出发,继续寻找相关的信息,以此类推。Web文档索引根据文档标题、首段落甚至整个页面内容进行,取决于搜索服务的数据收集策略。网络蜘蛛漫游过程中,根据页面标题、头、链接等生成摘要放在索引数据库。网络蜘蛛为实现快速浏览整个互联网,通常采用多线程技术实现在网上搜索信息。

2  策略模式

为设计可扩展Spider,应使各功能部件可装配化,须通过软件设计模式优化各部分的接口形式。

策略模式(StrategyPolicy[1]针对一组算法,将每个算法封装到具有共同接口的独立的类中,使它们可相互替换。策略模式使算法可在不影响客户端的情况下发生变化。

使用策略模式可把行为和环境分割开来。环境类负责维持和查询行为类,各种算法则在具体策略类(Concrete Strategy)中提供。由于算法和环境独立,算法的增减、修改都不影响环境和客户端。当出现新的促销折扣或现有的折扣政策出现变化时,只需要实现新的策略类,并在客户端登记即可。策略模式相当于“可插入式(Pluggable)的算法”。


1  策略模式典型结构


策略模式提出后,在各种语言及平台上又出现了各自的策略模式实现方法。

C++中,Alexandrescu比较“多继承”和“模板”技术,揭露了两者的本质,最终采用模板技术实现策略模式,并在其Loki代码库中大量使用这项技术[2]。这种策略模式的设计具备如下形式:

Template <class CreationPolicy>

Class WidgetManager: public CreationPolicy

{};

客户端具体化具备如下形式:

typedef WidgetManager<OpNewCreator<Widget>>

MyWidgetMgr;

java平台,IoCDI机制,即控制反转(IoCInversion of Control)或依赖注射(DIDependenceInjection)是Spring框架的核心。IoC是由容器控制组件间的关系,而非传统实现中由程序代码直接操控,这种控制权由程序代码到外部容器的转移。DI是对IoC更形象的解释。即由容器在运行期动态地将依赖关系(如构造参数、构造对象或接口)注入到组件中。

3  基于策略的Spider设计

垂直搜索引擎特点是“专、精、深”,且具有行业色彩,相比较通用搜索引擎的海量信息无序化,垂直搜索引擎则显得更加专注、具体和深入。垂直搜索引擎对搜索主题、搜索策略等要求更高的可变性和可扩展性。总结策略模式思想,使用Spring和策略模式实现可扩展的Spider

Spider功能部件和涉及数据抽象为如图所示5个接口:

2  策略Spider接口间关系

(1) IParser:抽象解析器,接收由IHtmlGetter传递来的网页,并使用IMatcher解析;

(2) IWriter:抽象写入器,将解析结果进行保存,数据库或文件;

(3) IData:类似ResultSet的行列式数据集,在IParserIParser间、IParserIWriter间传递;

(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.

原创粉丝点击