如何实现小型WEB搜索引擎(C#+SQL Server全文检索+Asp.net)

asp.net|server|sql|web|全文检索|搜索引擎

1 引言

21世纪,中国互联网搜索引擎领域可谓群雄逐鹿,百度、Yahoo、中搜、搜狗等等都使出浑身解数吸引着网民的眼球。这些大网站可谓是各有所长,总的来说虽然他们搜索功能都很强,但是搜索得到的结果基本上是千篇一律,信息的冗余量很大,网民不得不在一次又一次的翻页中浪费时间,或者为了想出一个好的关键词而绞尽脑汁。要是有一个有针对性的搜索引擎就好了,并且这个针对性应该是可以控制的。

2 SOSO的由来

笔者在上网搜索的过程中曾有这样痛苦的经历。由于笔者爱好编程,经常需要上网查找技术资料。但是搜到的结果往往是来自一些不起眼的小网站,它们主要是转载CSDN,赛迪网等一些技术大站上的文档,可恶的是,这些小网站常常转载不全,广告成堆,乱弹窗口,更有甚者还有病毒、木马等防不胜防。笔者当时想,如果有一个“IT技术文档搜索引擎”就好了,可惜没有,于是就自己动手做吧。我把CSDN、IT168、赛迪网等IT技术网站存储在“被搜网站库”中,按一定的周期启动Spider(蜘蛛)程序(Spider的原理后面讲),Spider搜到的结果按一定格式暂时存在硬盘上,然后由Carrier(搬运工)程序异步转存到数据库中,再利用SQL Server强大的全文检索(不是用Like语句J)结合Asp.net做出查询界面,这便有了SOSO的原型。由于SOSO只搜特定的网站,数量少,因此数据更新的速度更快,而且由于事先对网站就有了筛选,搜到的结果质量也比较高,比用大型搜索引擎有更好的用户体验。后来笔者想起校网络中心的老师曾提议做一个专门搜索华师校内所有网站信息的搜索引擎,便做了Scanner程序,它的功能是检索出给定的IP范围内所有的网站,并把这些网站的主要信息存入“被搜网站库”。于是便有了“华师人自己的WEB搜索引擎------MySOSO”,网址http://it.ccnu.edu.cn/mysoso。网站推出后受到了同学们的好评,校领导也曾在校网络建设工作会议上点名表扬。有个同学说:“以前想查一下校学生会主席的资料,用Google和Baidu搜到的结果都不理想,因为重名的太多了。有了MySOSO就好多了,搜到网页也都是来源于校内各大网站,真实可靠。”

3 SOSO的技术说明

3.1 SOSO的工作环境

软件环境:Windows平台(推荐Win2000,Win2003 Server)+.NET1.1 Framework + SQL Server 2000。硬件环境:服务器一台,配置越高越好。当然有多台服务器更好,这样Spider可以并行地在多台机器上跑。

3.2 SOSO的基本原理

SOSO主要由五部分组成,数据库+WebScanner+WebSpider+Carrier+Asp.net网站。

数据库主要有三张表:被搜网站表,网页表,关键词表。被搜网站表存放着Spider要去访问的网站的网址及其他基本信息,网页表存放搜到的网页的基本信息,关键词表记录用户检索过的关键词及其频率。数据库里还存放着一些存储过程,以供其它模块调用。此外,因为用到了SQL Server的全文检索功能,还要创建索引文件。

WebScanner是一个用C#编写的基于Console的应用程序,它的作用是扫描一定IP范围的所有网站的基本信息,并将其存入数据库。由于采用了多线程技术,扫描是比较快的。经测试,扫描华师的IP范围202.114.32.1~202.114.47.255,得到89个网站只用了45秒。

WebSpider是一个用C#编写的基于Console的应用程序,它的作用是访问数据库中给出的网站,并把网站的网页抓取下来,抓取的原理是利用正则表达式(可以适应各种网页),笔记经心设计了一个WebPage类,它可获取给定网址的网页的所有链接、站内链接,链接文字、纯文本、网页大小、标题等等一系列信息。获得的网页信息数据放入内存中的一个全局数据队列结构,而全局数据队列每隔一定周期被序列化后以文件的形式存于硬盘上,并将自身清空。WebSpider的内部采用了多线程技术,每个线程维护自己的广度优先遍历队列,因此速度非常快,经华师校内测试,每分钟平均抓取1,050张网页。此外,还可以在配置文件中设定Spider的同时最大并发线程、线程生存周期、搜索深度、数据序列化周期、特定网站过滤等参数。

Carrier是个批处理文件,它的作用是把WebSpider输出的序列化的数据从硬盘“搬”到数据库中。那么为什么WebSpider不直接把数据插到数据库里面呢?因为SQL Server在接收大量数据插入请求时,效率会下降,前台Asp.net网站的查询效率就会下降,查询时间变长。因此笔者在设计时采用了异步模式,WebSpider只负责收集数据,Carrier来负责数据插入数据库,这样通过合理的时间调度就可以避免瓶颈的出现。这种异步工作模式在有多台计算机运行WebSpider时优势将更加明显。

搜索网站是用Asp.net开发的,基本原理相信做过网站的人都知道。SOSO的亮点体现在三个地方。首先是对关键词分词的处理。由于笔者对这方面的算法研究不深,因此用了Split()加上SQL Server的FreeText功能实现了模糊查询。基本原理是这样的,比如说,当用户查询“刘德华天王  mp3”时,首先以与逻辑即contains“刘德华天王 and mp3”进行查询,如果无记录,则用或逻辑查询即contains“刘德华天王 or  mp3”。如果还是无记录,则用SQL Server的FreeText进行分词,可能返回匹配“刘德华”,“天王”,”mp3”当中任意一个词的记录,并且按照相关度的高低排序。其次,此网站的分页算法采用了“按需索取”的原则,即每次只从数据库中读取第m条到第m+pagesize-1条数据,因此查询速度还是比较可观的。关键词着色上也做了一些小技巧,以前被搜过的关键词的着色正则式会被预编译存在Application全局变量中,因此其它人再搜这个词时速度就很快了。最后要提一下网页右边那一栏,目前放的是校内新闻,它本质上是读取了一个RSS源并显示出来。这个RSS源是我做个另一个系统,它收集本校五大门户网站的新闻并以xml的形式显示。

华中师范大学信息技术系 SunJoy   ccnusjy@gmail.com

时间: 2024-11-03 09:07:05

如何实现小型WEB搜索引擎(C#+SQL Server全文检索+Asp.net)的相关文章

【转】如何实现小型WEB搜索引擎(C# SQL Server全文检索 Asp.net)

SOSO-----为您量身定做的 WEB搜索引擎 1 引言 21世纪,中国互联网搜索引擎领域可谓群雄逐鹿,百度.Yahoo.中搜.搜狗等等都使出浑身解数吸引着网民的眼球.这些大网站可谓是各有所长,总的来说虽然他们搜索功能都很强,但是搜索得到的结果基本上是千篇一律,信息的冗余量很大,网民不得不在一次又一次的翻页中浪费时间,或者为了想出一个好的关键词而绞尽脑汁.要是有一个有针对性的搜索引擎就好了,并且这个针对性应该是可以控制的. 2 SOSO的由来 笔者在上网搜索的过程中曾有这样痛苦的经历.由于笔者

WEB版的SQL Server企业管理器

一个WEB下管理SQl Server 2000数据库的工具,是MS在2003年提供的一个开源工具,用Net 1.0 开发的,原始版本已找不到这,这个是当时汉化后并加了一些功能和版本. 前几天,一个朋友在用 vs2008SP1的[动态数据WEB程序]时,突然想起了这个,向我要,翻箱倒柜的总算找到了,将代码改成NET 3.5 的,试了一下对SQL Server 2005 ,SQL Server 2008 支持的都不错, 说明: 使用SQLDMO, SQl Server 2000,SQL Server

开发连接远程SQL Server 的ASP程序应注意的问题

Microsoft SQL Server7.0是一种大型.分布式数据库系统,也可被认为是一种大型.分布式数据仓库.由于其与Windows NT和BackOffice以及Visual Studio具有紧密的配合,已被越来越多的网络应用系统所采用.而ASP程序也以其和NT的紧密连接,可使用ActiveX对象.CGI接口对象化等特点向CGI程序发起了有力的挑战.下面,就谈谈开发连接远程SQL Server 的ASP程序应注意的几个问题. SQL Server是一个十分注重安全性的数据库,特别是在7.0

免费1000M sql server/access/asp/.net免费空间

免费1000M sql server/access/asp/.net免费空间 免费空间初始大小为1000M,可按需申请提升到更大的空间: 免费空间支持绑定国际域名.二级域名等: 免费空间支持数据库,支持SQL Server, Access等: 本站免费空间拥有强大便捷的在线管理后台: 24×7的FTP访问管理,空间脚本支持 ASP, ASP.net等: 在线技术支持,空间的申请及备案等工作有专员协助您完成: 免费空间采用顶级门户网站才会采用的分布式集群技术架构: http://www.06la.

web service-请问sql server如何调用webservice

问题描述 请问sql server如何调用webservice sql server如何调用webservice: webservice中的函数中,参数为string类型,返回值为datatable,sql server怎么调用这个webservice 解决方案 http://www.cnblogs.com/icycore/p/3532197.html 解决方案二: declare @xmlhttp intdeclare @err intdeclare @Get VARCHAR(3000)EXE

Access与Sql Server之ASP代码比较

access|server|sql|比较 后台数据库: [Microsoft Access] 与 [Microsoft Sql Server] 更换之后,ASP代码应注意要修改的一些地方: [一]连接问题(举例) [Microsoft Access] constr = "DBQ=c:\data\clwz.mdb; DRIVER={Microsoft Access Driver (*.mdb)}" [Microsoft Sql Server] constr = "DRIVER=

技巧:Access与Sql Server之ASP代码比较

access|server|sql|比较|技巧 后台数据库: [Microsoft Access] 与 [Microsoft Sql Server] 更换之后,ASP代码应注意要修改的一些地方: [一]连接问题(举例) [Microsoft Access] constr = "DBQ=c:\data\clwz.mdb; DRIVER={Microsoft Access Driver (*.mdb)}" [Microsoft Sql Server] constr = "DRIV

SQL Server全文检索简介

server|全文检索 全文索引和全文检索是sql server 7.0的新增功能,它能够对数据中的字符类型列(如varchar.text等类型列)进行索引,并通过索引实现全文搜索查询.sql server常规索引与全文检索相比,二者的区别如下: 常规索引                                  全文索引使用create index或约束定义创建            使用全文索引存储过程创建和删除通过删除或执行drop index语句删除 当插入.修改或删除数据时,s

基于SQL Server的Asp.net图片存储技术

1 引言 互联网时代的到来,使得各种各样的基于互联网的应用系统层出不穷,其中绝大部分应用系统都会用 到图片数据,需要将图片在用户界面显示出来.这里介绍一种实现方法,把图片存储到某个文件夹内.然 后按要求显示.具体实现步骤是把图片路径等记录的附加信息存储到数据库中,而真正的图片文件存储到 某个文件夹.该方法是一种很好的解决方案. 2 图片的处理方式 对于图片的处理有两种方式:①图片数据以文件形式直接存储在硬盘,在数据库中保存该图片的记录 附加信息(路径,文件名,注释-):②图片直接存储在数据库中.