优搜搜索的设计与实现技术
2011-04-20叶文珺史习文
叶文珺,史习文
(上海电力学院计算机与信息工程学院,上海 200090)
互联网时代的信息搜索无疑具有很高的实用价值,因此诞生了许多搜索引擎,如百度,谷歌等.搜索引擎大大方便了人们对于信息的查询效率,同时也带来了一些问题,如:不同的搜索引擎得出的结果可能存在差异;不同的搜索引擎的功能各不相同.
优搜(USou)是一款自主设计的共享软件,是一个整合式的搜索工具.其使用方法简单,具备智能的信息分析、挑选搜索引擎及反馈结果的功能,具有可扩展性,并能在其平台上不断增加新的搜索功能.
1 优搜的架构设计
优搜采用组件架构[1],在优搜平台上向插件提供服务.优搜的所有功能都是基于其松散的组件架构,安装一种新的组件可以使优搜提供新的服务接口,由插件访问新的组件接口[2],从而产生新的功能.
整款系统由包含界面的主程序、各种组件和组件管理器组成,其功能由插件来实现,优搜的整体架构如图1所示.其中,优搜主程序是优搜的界面,并不是一个组件,它通过访问服务管理来对4个组件进行全局性操控.
优搜的架构设计模仿了Office的开放对象访问机制,每一个组件在使用此架构时,都有一个根容器和各个服务容器构成的服务容器树.每一个节点的服务都可以一直向上传递,直到根部,而每一个节点请求服务时,都可以从根节点获得.因此,根节点汇总了所有可提供的服务,当某个对象要请求服务时,只需向根节点发送信息即可.
上面涉及的所有服务都是通过服务管理组件的DLL来进行管理的,服务管理是优搜组件式架构的核心,也是所有组件访问另一个组件的桥梁.通过该模块,一个组件可以访问另一个组件的功能,而不需要知道该组件应该加载哪个文件,这使得各个组件之间成为一个松散的架构.也就是说,任意一个组件、功能性插件或主程序只需要知道其所要访问的另一个组件的接口,就可以通过服务管理来查询并访问到相应功能.所有组件都包含着服务管理器接口,可以通过它得到其他组件的接口,这样就可以通过一个组件操作其他的组件或与之进行通讯了.
图1 优搜整体架构
优搜各组件功能如下.
(1)捕获代理服务提供单词捕获功能的支持,用于捕获用户鼠标上的关键字.若没有安装该组件,则优搜只能通过手动搜索,而不支持即指即搜功能.
(2)插件服务向优搜提供插件式搜索服务支持,所能提供的服务包括读取自定义配置文件,获得指定插件接口,以及获得所有插件名称列表等.若没有安装该组件,则优搜将无法支持插件,从而导致系统无法进行插件式搜索.
(3)搜索引擎服务提供对于上述两款组件的控制使用功能.该组件包含智能分析模块,用于搜索引擎的排序和用户选择结果的反馈支持.通过访问该组件,优搜主程序可以下达搜索执行命令、插件选择命令等.
(4)应用设置服务提供主程序设置值的读取支持,向优搜其他组件提供程序配置信息.通过该服务,可以读取用户设定的程序参数,并调整其他服务的参数.
2 优搜插件排序算法
为了根据用户搜索的关键字选择更好的搜索引擎结果,需要一个良好的插件排序机制.排序服务推荐的插件排序是依据其他用户使用结果而得出的,根据每个插件的得分高低对其进行排序,并给出建议.其中,插件得分的高低是由其他用户以前搜索该关键字的频率所决定的.
优搜支持两种排序算法,即:基本排序算法和使用RankService的排序算法.
2.1 基本排序算法
基本排序算法的思路比较简单.首先,比较两个结果的类型,结果类型的大小为枚举值类型的大小;其次,当两个结果类型相同时,就比较其用户排序值,用户排序值保存在一个变量里,用户可以进行手动设置.
2.2 使用RankService的排序算法
优搜使用了一个反馈—学习—推荐的机制,通过其他用户搜索关键字的反馈情况来给插件打分,并在其他用户搜索这个关键字时给出较好的排序结果.
RankService根据其他用户之前使用该关键字的体验结果,采用页面分析技术[3]对搜索引擎进行该关键字排名.随着用户结果反馈的增加,以及服务器的不断学习,使得服务器可以得出更为精确的结果建议.
该排序算法使用RankService来查询服务器推荐插件,并将服务器的推荐列入排序考虑的范围.可以将搜索结果分为如下4种情况:
(1)单一结果且为强匹配如关键字为手机号码时,搜索结果为该手机号码的所属城市等信息;
(2)单一结果且为正常匹配这种单一结果的匹配称为正常单一匹配,如关键字为任意英语单词时,程序无法确切地判断出用户是要搜索其翻译,还是搜索有关这个单词的其他信息,因此搜索结果为该英语单词的解释;
(3)集合式结果如关键字为任意文字时,搜索结果为与该关键字有关的链接;
(4)无匹配无法找到该关键字的结果时为无匹配.
4 种情况都含有一个值,其大小表示当搜索结果为该情况时搜索结果的优先级级别,值越大,则优先级别越高.
3 服务管理组件
服务管理是优搜组件式架构的核心,用于提供各种已配置组件的接口,是一个组件访问另一个组件的中间站.主要包含以下两个方面的内容.
(1)服务管理器接口与应用服务应用服务继承于服务管理器接口.通过该接口可以安装新的服务,并储存服务接口,使得别的程序通过函数调用就可以获得想要的组件服务,同时可以通过.NET反射机制加载组件[4].由于所有要加载的组件信息是与已安装插件的信息一起保存在自定义配置文件中,因此当程序启动时,优搜主程序将读入这个配置列表,并根据配置列表加载所有组件.
(2)储存插件信息的类PluginInfo与Resported Result在服务管理组件中,PluginInfo是一个非常重要的类,它存储了有关某项插件的所有信息.ResportedResult类定义了当前搜索中搜索结果的类型,若为集合式结果,则还保存了结果中所有的链接.
4 结语
优搜具有广阔的发展前景.例如,可以在优搜的平台上为用户开发出新的插件,同时还可以开发优搜增值插件,为用户提供消费品和推荐服务,并从这些企业收取适当的费用,实现优搜的商业价值.另外,可以对优搜进一步开发,产生更多的优搜衍生品,如优搜门户等.
[1]ERICH Gamma.Design patterns-elements of reusable objectoriented software[M].北京:清华大学出版社,2005:351-377.
[2]CHRISTIAN Nagel.C#高级编程[M].第6版.北京:清华大学出版社,2008:1 124-1 142.
[3]周静.ASP和ASP.NET页面间的数据传递方式探索[J].微计算机信息,2006(3-5):114-115.
[4]KRZYSZTOF Cwalina..NET设计规范[M].第2版.北京:人民邮电出版社,2010:244-305.
(编辑白林雪)