元搜索引擎并行式数据查询写作技巧模块的设计与实现

点赞:6721 浏览:18954 近期更新时间:2024-02-15 作者:网友分享原创网站原创

摘 要:随着各大搜索引擎巨头推出了搜索怎么写作的开放API,元搜索引擎迎来了新一轮发展.笔者通过对元搜索引擎基本架构的分析,在Ja平台上设计并实现了基于Executor并发框架的元搜索引擎数据查询写作技巧模块,同时还对其实现进行了性能分析.

关 键 词 :元搜索引擎;并行;Google Search API

中图分类号:TP393.092

面对庞大数量级的互联网信息,各搜索引擎的排序算法、搜索侧重点、结果显示均有所不同.互联网用户为了查询相关内容,通常需要同时使用多个搜索引擎查询内容,然后综合得出最适合自己的内容.这无可避免地给搜索用户带来了搜索成本的上升.

元搜索引擎作为基于独立搜索引擎的搜索引擎,是搜索引擎发展过程中的一种崭新形式.通过一定策略综合多个搜索引擎的搜索结果,元搜索引擎能够为用户省去一定额外的搜索时间,方便用户更快速找到适合自己的查询结果.

本文主要是笔者在元搜索引擎上进行探究的成果,主要针对笔者设计并实现的元搜索引擎中的数据查询写作技巧模块,以及如何在数据写作技巧中引入多线程,提高并发度.

1.功能描述

元搜索引擎的搜索结果是基于多个成员搜索引擎的搜索结果进行处理之后得到的.元搜索引擎的基本工作原理大致是以下几步:(1)从用户查询界面获取查询信息;(2)将查询信息分别转换为各个成员搜索引擎都能够接受的形式;(3)向成员搜索引擎提交查询请求;(4)获取各个成员搜索引擎的原始查询结果;(5)对原始查询结果进行预处理、去重、排序等操作,形成最终结果;(6)把最终查询结果返回给用户.

笔者开发的元搜索引擎的数据查询写作技巧模块属于元搜索引擎实现中的一个重要组成部分,模块通过调用Google和Bing两大搜索引擎的Search API,根据查询关键字返回结构化的查询结果.

在实现的技术上,笔者选择基于Ja平台开发,运用Ja平台的成熟多线程应用框架Executor作为核心实现工具,能够方便地使用j.u.c并发类库构建业务.最终实现并发地调用成员搜索引擎的Search API,获取原始搜索结果.

2.模块系统结构

模块总体分为三个部分,第一部分是接收外部数据输入的参数设置查询任务,第二部分是在线程池中启动Google和Bing的查询线程,并发完成任务,第三部分是汇总所有查询任务的结果,进行解析并结构化之后输出给外部调用者.

笔者在此次设计的过程中,采用的成员搜索引擎是著名的两大搜索引擎Google和Bing.原因之一是这两个搜索引擎在搜索技术上均非常优秀,领先大部分搜索引擎,其二是它们都为普通开发者提供了方便快捷的搜索接口.普通开发者只需要经过几个简单的步骤就可以免费使用搜索API,并能够设置搜索结果的查询词、编码字符集以及返回格式等等.

现对系统三个部分的职责分配描述如下:

2.1 设置并启动查询任务.在模块被元搜索引擎主线程调用时,首先根据传入的查询参数(如查询词,结果条数,查询类别等)创建负责查询的任务线程.随后还要依照Google和Bing对查询请求的认证方式提供认证密钥.任务线程设置完成之后,即可将任务线程提交到线程池中并发执行,等待返回结果.

2.2 获取并解析查询结果数据.这一部分表示的是查询任务线程的职责.简单来说,查询任务线程的职责就是按照设置好的参数向指定的搜索引擎提交查询请求,接着在获取查询结果之后,对查询结果进行结构化之后将结果返回给调用线程.

2.3 生成并输出统一结果集.在获得每一个查询任务线程的查询结果之后,模块还需要将不同搜索引擎的返回结果进行统一汇总之后,再将结果返回给元搜索引擎主线程.

3.核心实现要点

3.1 并发查询.模块使用Google和Bing两大搜索引擎的Search API来获取查询结果,每一个查询任务只负责同一个搜索引擎的通信.


因为希望将查询任务提交到线程池中执行,并且查询任务都需要返回结果,于是查询任务线程不能够实现Runnable,而需要实现Callable接口,代表有返回值的线程方法.查询任务线程的实现算法如下:a.读取特定的查询参数,如字符集编码,查询关键字,返回格式(XML/JSON),验证密钥,返回条数等;b.根据查询参数创建针对某一搜索引擎接口的ja..URL实例,同时调用openConnection()方法提交查询请求;c.阻塞等待返回结果接收完毕;d.对某一搜索引擎的返回结果进行结构化后,返回给元搜索引擎主线程.

3.2 结构化返回结果.解析结果的目的是从搜索结果中抽取有效的搜索结果信息.在解析过程中,需要将搜索结果分成多条搜索结果,每一条搜索结果还需要解析出搜索结果的标题、URL地址等有效信息.从搜索引擎返回的结果中往往包含了许多额外的信息,这些信息能够在日后扩展功能时能够用到,目前暂不考虑.

在Google和Bing的Search API中提供XML和JSON两种格式的返回格式,笔者在系统中采用较为熟悉的XML返回格式的结果,在解析过程中使用了dom4j进行解析.

4.测试与运行结果

对比表1与表2的数据可以发现,数据查询写作技巧模块的平均响应时间T基本符合关系式.同时其响应时间较短,基本符合使用要求.