【转】如何实现小型WEB搜索引擎(C# SQL Server全文检索 Asp.net)
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. 博客网数据挖掘的有关设想(转自吴波博客)
转载于:https://www.cnblogs.com/ae6623/archive/2011/01/09/4416907.html
【转】如何实现小型WEB搜索引擎(C# SQL Server全文检索 Asp.net)相关推荐
- 采用Opserver来监控你的ASP.NET项目系列(二、监控SQL Server与Asp.Net项目)
前言 之前有过2篇关于如何监控ASP.NET core项目的文章,有兴趣的也可以看看. ASP.NET Core之跨平台的实时性能监控 ASP.NET Core之跨平台的实时性能监控(2.健康检查) ...
- 使用SQL Server存储ASP.NET Session变量
创建和配置ASP.NET Session状态数据库 在基于NLB(网络负载平衡)环境下的ASP.NET Web应用程序开发,我们需要将Session存储在数据库中供多个Web应用程序调用,以下为配置方 ...
- sql server 全文检索 使用
目前项目中的日志查询 功能 由于长年累月的写入,目前已经达到千万级,对日志进行like 查询,速度可想而知. 此处只讨论 在数据库的优化. 当时 想到两个方案,一个是分区,一个 是全文检索. 分区的话 ...
- 未能加载文件或程序集mysql.web.v20__关于MySQL Server影响ASP.NET网站使用的问题:未能加载文件或程序集MySql.Web.v20...
标签: 最近开发的ASP.NET MVC 4网站,之前头头说如果遇到装过MySQL的机器就绕着走,还觉得奇怪 嘛,该来的迟早都会来 于是撞上了一台 启动网站再访问,总是出错,提示"未能加载文 ...
- SQL Server通过web方式进行远程维护,管理
现在许多应用都在布署到云端,那么数据库都需要远程管理维护,那么基于web的方式进行操作是比较安全便捷的. TreeSoft数据库管理软件使用JAVA开发,采用稳定通用的springMVC+JDBC架构 ...
- 基于事件驱动架构构建微服务第5部分:容器化(Web Api Core 和 SQL Server Linux)
原文链接:https://logcorner.com/building-microservices-through-event-driven-architecture-part5-dockerizat ...
- 升级到新SQL Server版本
This article gives an overview of different editions in SQL Server and also explains the process to ...
- 利用 ApsaraDB For SQL Server各版本高效而低廉地实现关键业务需求
1. 什么是SQL Server多版本 微软的SQL Server除了不断迭代的版本升级外,还有从功能差异上分为几个不同的版本. SQL Server 2012有企业版.商务智能版.标准版.开发版.W ...
- sql server 2005
SQL Server 是一个关系数据库管理系统.它最初是由Microsoft Sybase 和Ashton-Tate三家公司共同开发的,于1988 年推出了第一个OS/2 版本.在Windows NT ...
最新文章
- 卷积神经网络是如何实现不变性特征提取的
- java字典写实例,基于JAVA的新华字典接口调用代码实例
- Windows10记事本和Visual Studio Code文件encoding的设置
- 【李宏毅机器学习】Logistic Regression 逻辑回归(p11) 学习笔记
- 【JUC】第二章 线程间通信、集合的线程安全
- QueryWrapper 一些常用操作 or like in 大于 小于 操作
- RH413-测试文件的特殊权限
- 真的发现自己已不再年轻
- zlog 日志库使用说明,看完不懂打我...
- 跨性別/偽娘/性轉漫畫中譯對照
- 三星新平板 Galaxy Note 10.1全拆解
- JavaSE 知识大纲
- 跳板机/堡垒机并不安全
- matlab multiply,MATLAB Matrix Multiply Code效率
- 区块链学习笔记(初识区块链)
- SEO优化:网站优化之关键词优化技术
- 爬虫案例之Pubmed数据库下载
- 全网舆情监测系统功能板块具体详介
- 四川师范大学区域规划(3-区域发展的经济社会背景分析)90分以上版本
- 一分钟搞懂云计算和大数据对人到底有啥用?
热门文章
- 【开发】后端框架——Mybatis
- 安装Ubuntu VMware Workstation 不可恢复错误
- 大数据、云计算、元宇宙——吉吉拍的探索之路
- 微型计算机技术上机报告心得,微机培训心得体会3篇
- 在键盘上输入两个int型数据,比较其大小,并输出其中较小的数
- 本地搭建属于自己的ChatGPT:基于PyTorch+ChatGLM-6b+Streamlit+QDrant+DuckDuckGo
- 【练习/Python】监测汇率脚本
- 业务流程监控:让多维度监控有了灵魂
- 学画画软件app推荐_可以学画画的APP有哪些?
- Android平台下的图片/视频转Ascii码图片/视频 (一)