聚合搜索(一)

目前网络上的搜索引擎众多,并且各有优缺点,为了搜索某些内容,有时经常需要登录不同的搜索引擎,在不同的搜索引擎网页之间转换非常不方便。本章将做一个聚合搜索的演示示例,它集成了百度、Google、雅虎、爱问、搜狗、中搜6大常用搜索引擎。本系统以6大搜索引擎作为搜索源,利用正则表达式匹配搜索结果,从而给用户呈现一个没有任何搜索引擎广告,整洁的搜索结果。本章将从工具类代码、底层代码、页面文件3个方面逐步讲述其具体实现。
1.1 需求分析和系统概况
搜索引擎是网络上常用且实用的一项功能。百度、Google、雅虎、爱问、搜狗、中搜等搜索引擎在搜索方面各有千秋。有时候,为了搜索某方面的具体内容,用户不得不从一个搜索引擎再转到另一个搜索引擎,极为不方便。本章的聚合搜索就是为了适应这个需求而产生的。
1.1.1 需求分析
与其他传统搜索引擎不同,本章的聚合搜索没有自己专用的搜索引擎。它是建立在传统搜索引擎基础上的,可以看作是第三代搜索引擎的一个初步尝试。
本系统的目标就是把6大搜索引擎的强大功能集成到一个页面中,使用户无需在搜索引擎间转来转去,便可得到最符合自己要求的搜索结果。并且搜索引擎的显示界面不包含任何传统搜索引擎的广告,而是显示本系统指定的广告内容。这为系统的盈利模式开辟了一个思路。
由于各大搜索引擎的搜索结果显示界面的页面布局有很大差别,所以必须针对每个搜索引擎写出专用的代码。本章的做法是:首先定义一个搜索抽象类,用来实现各搜索引擎专用类通用的方法和属性。然后各搜索引擎专用类继承这个搜索抽象类,并重写自己的专用方法。本章将用到大量的正则表达式,不熟悉这方面知识的读者,建议先查看相关内容。
1.1.2 系统概况
本系统的运行效果如图13.1所示。在文本框中输入要搜索的关键字,单击“搜索”按钮,便可得到搜索结果。页面的右部是本系统的广告位,可以显示本系统的任意广告。系统默认使用的是Google的搜索引擎,如果对搜索结果不满意,可以选择其他搜索引擎。方法是单击网页头部搜索引擎列表。在搜索结果的底部有分页导航,可以查看其他页的搜索结果。图13.2显示的就是搜索结果底部的页码导航条。
图13.1 聚合搜索的运行效果
图13.2 聚合搜索页面底部的页码导航条
1.1.3 文件结构
本系统的服务器端代码比较多,主要是定义6大搜索引擎的专用类。聚合搜索系统的文件资源管理器窗口如图13.3所示。
图13.3 聚合搜索的资源管理器窗口
其中各个文件的具体功能如表13-1所示。
表13-1 系统文件说明
文 件 名
说 明
Baidu.cs
百度专用搜索类
Google.cs
谷歌专用搜索类
Iask.cs
爱问专用搜索类
ISearch.cs
各专用搜索类的基类
SearchQuery.cs
搜索的查询字符串的处理类
Sogou.cs
搜狗专用搜索类
Tools.cs
工具类,提供一些工具方法,方便使用
Yahoo.cs
雅虎专用搜索类
Zhongsou.cs
中搜专用搜索类
Result.xsl
搜索结果的格式化文件
S.ashx
用于搜索显示的Handler
Search.aspx
搜索框架页面
Search.xml
存储搜索引擎相关信息
Top.htm
搜索引擎选择页面,位于Search.aspx页面的头部框架中
XMLHttp.js
包含$()方法和Ajax封装类

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


什么是设计模式一套被反复使用、多数人知晓的、经过分类编目的、代码 设计经验 的总结;使用设计模式是为了 可重用 代码、让代码 更容易 被他人理解、保证代码 可靠性;设计模式使代码编制  真正工程化;设计模式使软件工程的 基石脉络, 如同大厦的结构一样;并不直接用来完成代码的编写,而是 描述 在各种不同情况下,要怎么解决问题的一种方案;能使不稳定依赖于相对稳定、具体依赖于相对抽象,避免引
单一职责原则定义(Single Responsibility Principle,SRP)一个对象应该只包含 单一的职责,并且该职责被完整地封装在一个类中。Every  Object should have  a single responsibility, and that responsibility should be entirely encapsulated by t
动态代理和CGLib代理分不清吗,看看这篇文章,写的非常好,强烈推荐。原文截图*************************************************************************************************************************原文文本************
适配器模式将一个类的接口转换成客户期望的另一个接口,使得原本接口不兼容的类可以相互合作。
策略模式定义了一系列算法族,并封装在类中,它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。
设计模式讲的是如何编写可扩展、可维护、可读的高质量代码,它是针对软件开发中经常遇到的一些设计问题,总结出来的一套通用的解决方案。
模板方法模式在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中,使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。
迭代器模式提供了一种方法,用于遍历集合对象中的元素,而又不暴露其内部的细节。
外观模式又叫门面模式,它提供了一个统一的(高层)接口,用来访问子系统中的一群接口,使得子系统更容易使用。
单例模式(Singleton Design Pattern)保证一个类只能有一个实例,并提供一个全局访问点。
组合模式可以将对象组合成树形结构来表示“整体-部分”的层次结构,使得客户可以用一致的方式处理个别对象和对象组合。
装饰者模式能够更灵活的,动态的给对象添加其它功能,而不需要修改任何现有的底层代码。
观察者模式(Observer Design Pattern)定义了对象之间的一对多依赖,当对象状态改变的时候,所有依赖者都会自动收到通知。
代理模式为对象提供一个代理,来控制对该对象的访问。代理模式在不改变原始类代码的情况下,通过引入代理类来给原始类附加功能。
工厂模式(Factory Design Pattern)可细分为三种,分别是简单工厂,工厂方法和抽象工厂,它们都是为了更好的创建对象。
状态模式允许对象在内部状态改变时,改变它的行为,对象看起来好像改变了它的类。
命令模式将请求封装为对象,能够支持请求的排队执行、记录日志、撤销等功能。
备忘录模式(Memento Pattern)保存一个对象的某个状态,以便在适当的时候恢复对象。备忘录模式属于行为型模式。 基本介绍 **意图:**在不破坏封装性的前提下,捕获一个对象的内部状态,并在该
顾名思义,责任链模式(Chain of Responsibility Pattern)为请求创建了一个接收者对象的链。这种模式给予请求的类型,对请求的发送者和接收者进行解耦。这种类型的设计模式属于行为
享元模式(Flyweight Pattern)(轻量级)(共享元素)主要用于减少创建对象的数量,以减少内存占用和提高性能。这种类型的设计模式属于结构型模式,它提供了减少对象数量从而改善应用所需的对象结