[FtpSearchV2][构架设计][第一篇] 系统需求和概要设计

简介:

本文将描述FtpSearch搜索引擎的设计。包括系统的需求、分析、构架和难点解析。更多内容(包括第一版)请参考我博客(http://yuandong.cnblogs.com)上FtpSearch分类中的其他文章。

文章写得比较浅显(主要是个人水平有限),大家可以读来消遣排砖。^^

 

第一篇 系统需求和概要设计

一、              系统需求:对于给定的一组Ftp服务器,系统可以根据关键字对其所有的文件进行搜索。预计系统的数据量为100K。(更多信息可以参考我的上一篇Bloghttp://yuandong.cnblogs.com/archive/2006/06/25/435188.html

二、              系统设计:

对于搜索系统其主要模块包括:抓取、储存、索引、查找四个部分。

00000.jpg

以下我们逐个分析。

 

1.           抓取。抓取指的是获取Ftp服务器内容的过程。其本质是图的的遍历。其设计主要包含以下几个方面:

a)         Ftp服务器的访问。对于一个Ftp搜索引擎,其实我们用到的主要就是LIST命令,并对于返回的系统目录信息进行解析。在FtpSearch中,此部分使用了第三方的组件EdtFtpNet,这是一个遵守GPL协议的开源组件。网址为http://www.enterprisedt.com/products/edtftpnet/。这个组件功能很强大,几乎涵盖了Ftp客户端相关的所有功能。而我们只需要其中的LIST功能。另外,此组件的原始版本不支持中文,支持中文的版本可以点击这里下载。

b)        Ftp服务器的遍历。FtpSearch采用深度优先遍历算法,对于图上的一个节点,(一个服务器),我们可以将其视为一个N叉树。忽略服务器之间的连接,整个Ftp服务器网络即可视为一个森林。我们对每一个服务器用一个线程进行遍历,提供NewFileFound、ExpectionOccur等事件,用于新文件发现、发生错误等进行处理。在此,服务器是一个稍微抽象一点的概念,指的是目标服务器上的要遍历目录的集合。

c)        错误处理。对于搜索引擎来说,访问网络错误,比如Url无效或者服务器超时来说,都不应该算是Exception,应该视为一种正常的情况予以处理。在FtpSearch中,我将异常分为两类,一类是致命异常(FetalExecption),指的是服务器超时、线程死锁等无法继续进行的错误,其主要的处理方式是重新启动线程并尝试,超过一定尝试次数则是为无效地址予以报告(触发事件)。第二类是普通异常(CommonException),主要是指某个目录无法访问,主要的处理方式是跳过此目录继续遍历。对于任何一种异常,Robot(网络机器人,又称为Spider、蜘蛛、爬虫……)都出发一个事件、可以有由更高层改变处理逻辑。

2.           储存:储存主要是指对于原始数据的储存,在FtpSearch中即为搜索到的文件的信息,包括Url,Name,LastModifyTime,Server等。在我的设计中使用的是MS SQLServer 2000。对于大概100K数据来说应该不是很吃力。

3.           索引:索引是搜索中非常重要的核心部分。其主要设计一下部分:

a)         索引方式:目前大部分的索引使用的是基于关键字的倒排索引。详细信息Google一把能出一打。

b)        分词:分词是很重要的一部分,特别是中文的分词。目前比较简单的分词是二分法分词,简单点说就是两个字一份。中文二字词最多,所以这个方法还是比较有效的。更好一些的算法,特别是在保证速度的前提下的算法就是很专业的问题了。中科院有个分词项目,ICTCLAS,开源的,而且提供各个语言的编程接口,算是国粹了。

c)        高级功能:指的是匹配程度的得分、多字段联合查询等。

FtpSearch中用的是著名的DotLucene(Lucene的.Net版本)。具体的使用方法可以到网上查找,另外说一下,就算不作搜索引擎,而牵扯到数据的搜索的问题,Lucene都能给你不一样的感觉(不是广告^^)。

4.           查找:查找主要是指对于用户提供一组接口,提供查询服务,在此基础上可以构建WebSite、WebServies等。

本文转自冬冬博客园博客,原文链接:http://www.cnblogs.com/yuandong/archive/2006/06/26/436395.html ,如需转载请自行联系原作者
相关文章
|
4月前
|
存储 监控 测试技术
第四章项目管理一般知识(选择4分)
第四章项目管理一般知识(选择4分)
|
4月前
|
自然语言处理 监控 项目管理
第六章项目整体管理(选择5分,案例偶尔考)
第六章项目整体管理(选择5分,案例偶尔考)
|
6月前
|
设计模式 测试技术 uml
[学习][笔记]设计模式(基于C/C++实现)之 设计基础(二)
[学习][笔记]设计模式(基于C/C++实现)之 设计基础(二)
|
6月前
|
设计模式 C语言 uml
[学习][笔记]设计模式(基于C/C++实现)之 设计基础(一)
[学习][笔记]设计模式(基于C/C++实现)之 设计基础
|
9月前
|
SQL 安全 JavaScript
软件测试 系统非功能性测试习题及答案
软件测试 系统非功能性测试习题及答案
270 0
|
区块链
分投趣fintoch系统开发(开发原理)丨fintoch分投趣系统开发(案例源码)
 在DApp中,计算能力来自通常通过区块链或其他去中心化基础设施组织的去中心化节点网络。在应用程序中,计算能力通常来自我们的计算机(客户端应用程序)。或者来自服务器(服务器端应用程序),这表示高度集中。
|
设计模式 测试技术 uml
[学习][笔记]设计模式(基于C/C++实现)之 设计基础
设计模式(基于C/C++实现)之 设计基础
355 0
[学习][笔记]设计模式(基于C/C++实现)之 设计基础