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

本文涉及的产品
云数据库 RDS SQL Server,基础系列 2核4GB
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
简介: SOSO-----为您量身定做的 WEB搜索引擎 1 引言 21世纪,中国互联网搜索引擎领域可谓群雄逐鹿,百度、Yahoo、中搜、搜狗等等都使出浑身解数吸引着网民的眼球。这些大网站可谓是各有所长,总的来说虽然他们搜索功能都很强,但是搜索得到的结果基本上是千篇一律,信息的冗余量很大,网民不得不在一次又一次的翻页中浪费时间,或者为了想出一个好的关键词而绞尽脑汁。



SOSO-----为您量身定做的 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

呵呵,顺便推广告一下我做的另一个网站教育网FTP搜索引擎http://so.javaye.com

关心华师的朋友可以订阅华师新闻RSS http://it.ccnu.edu.cn/ccnurss


推荐文章:
1. 数据挖掘相关的10个问题
2. 数据挖掘 理论和实际
3. 什么是数据挖掘
4. 空间数据挖掘
5. 网站的数据挖掘
6. 数据挖掘的基本知识
7. CIO调查:数据挖掘并不遥远
8. 微软BI系列
9. 学习系统数据挖掘功能
10. 博客网数据挖掘的有关设想(转自吴波博客)
相关实践学习
使用SQL语句管理索引
本次实验主要介绍如何在RDS-SQLServer数据库中,使用SQL语句管理索引。
SQL Server on Linux入门教程
SQL Server数据库一直只提供Windows下的版本。2016年微软宣布推出可运行在Linux系统下的SQL Server数据库,该版本目前还是早期预览版本。本课程主要介绍SQLServer On Linux的基本知识。 相关的阿里云产品:云数据库RDS SQL Server版 RDS SQL Server不仅拥有高可用架构和任意时间点的数据恢复功能,强力支撑各种企业应用,同时也包含了微软的License费用,减少额外支出。 了解产品详情: https://www.aliyun.com/product/rds/sqlserver
目录
相关文章
|
10天前
|
开发框架 前端开发 JavaScript
ASP.NET Web Pages - 教程
ASP.NET Web Pages 是一种用于创建动态网页的开发模式,采用HTML、CSS、JavaScript 和服务器脚本。本教程聚焦于Web Pages,介绍如何使用Razor语法结合服务器端代码与前端技术,以及利用WebMatrix工具进行开发。适合初学者入门ASP.NET。
|
25天前
|
Java 物联网 C#
C#/.NET/.NET Core学习路线集合,学习不迷路!
C#/.NET/.NET Core学习路线集合,学习不迷路!
|
2月前
|
XML JSON API
ServiceStack:不仅仅是一个高性能Web API和微服务框架,更是一站式解决方案——深入解析其多协议支持及简便开发流程,带您体验前所未有的.NET开发效率革命
【10月更文挑战第9天】ServiceStack 是一个高性能的 Web API 和微服务框架,支持 JSON、XML、CSV 等多种数据格式。它简化了 .NET 应用的开发流程,提供了直观的 RESTful 服务构建方式。ServiceStack 支持高并发请求和复杂业务逻辑,安装简单,通过 NuGet 包管理器即可快速集成。示例代码展示了如何创建一个返回当前日期的简单服务,包括定义请求和响应 DTO、实现服务逻辑、配置路由和宿主。ServiceStack 还支持 WebSocket、SignalR 等实时通信协议,具备自动验证、自动过滤器等丰富功能,适合快速搭建高性能、可扩展的服务端应用。
146 3
|
6天前
|
算法 Java 测试技术
Benchmark.NET:让 C# 测试程序性能变得既酷又简单
Benchmark.NET是一款专为 .NET 平台设计的性能基准测试框架,它可以帮助你测量代码的执行时间、内存使用情况等性能指标。它就像是你代码的 "健身教练",帮助你找到瓶颈,优化性能,让你的应用跑得更快、更稳!希望这个小教程能让你在追求高性能的路上越走越远,享受编程带来的无限乐趣!
46 13
|
10天前
|
开发框架 .NET PHP
ASP.NET Web Pages - 添加 Razor 代码
ASP.NET Web Pages 使用 Razor 标记添加服务器端代码,支持 C# 和 Visual Basic。Razor 语法简洁易学,类似于 ASP 和 PHP。例如,在网页中加入 `@DateTime.Now` 可以实时显示当前时间。
|
29天前
|
Java 物联网 编译器
C#一分钟浅谈:.NET Core 与 .NET 5 区别
本文对比了 .NET Core 和 .NET 5,从历史背景、主要区别、常见问题及易错点等方面进行了详细分析。.NET Core 侧重跨平台支持和高性能,而 .NET 5 在此基础上统一了 .NET 生态系统,增加了更多新特性和优化。开发者可根据具体需求选择合适的版本。
45 7
|
25天前
|
人工智能 开发框架 前端开发
C#/.NET/.NET Core技术前沿周刊 | 第 12 期(2024年11.01-11.10)
C#/.NET/.NET Core技术前沿周刊 | 第 12 期(2024年11.01-11.10)
|
25天前
|
开发框架 网络协议 .NET
C#/.NET/.NET Core优秀项目和框架2024年10月简报
C#/.NET/.NET Core优秀项目和框架2024年10月简报
|
14天前
|
数据库连接 数据库 C#
Windows下C# 通过ADO.NET方式连接南大通用GBase 8s数据库(上)
Windows下C# 通过ADO.NET方式连接南大通用GBase 8s数据库(上)
|
14天前
|
数据库连接 数据库 C#
Windows下C# 通过ADO.NET方式连接南大通用GBase 8s数据库(下)
本文接续前文,深入讲解了在Windows环境下使用C#和ADO.NET操作南大通用GBase 8s数据库的方法。通过Visual Studio 2022创建项目,添加GBase 8s的DLL引用,并提供了详细的C#代码示例,涵盖数据库连接、表的创建与修改、数据的增删查改等操作,旨在帮助开发者提高数据库管理效率。

热门文章

最新文章