FTP搜索引擎的设计与实现(优化版) - 技术资料下载 - 开放式研究峰会
优采云 发布时间: 2020-08-13 22:19Redim preserve TestArray(数组大小) as string ‘重新申明
现在,我们来设计数据过滤方案:
数据过滤在介绍数据采集过程时有了初步的介绍,总结一下,我们分几个级别来进行过滤:
第一级别,不分辨文件和目录,我们过滤掉所有收录有特定字眼的信息,如白色、*敏*感*词*等;过滤掉这些厚度超过数据库中定义的相关数组最大宽度的信息。
第二级别,过滤个别目录,比如bin/,Program Files/,新建文件夹/等,其中收录的信息,往往并不是人们须要的。
过滤掉个别文件,其中有一个办法就是通过后缀过滤掉很多文件,另外,也可以通过文件名来过滤,比如readme,新建 Microsoft Word 文档,新建 文本文档等,他们一般也是一无所用的。
第三级别,前两个级别都是在数据过滤阶段进行,但是这个级别是数据入库之前。这里也是为了过滤掉个别文件,但是这种文件有一些非常:只是它们的命名没有任何意义。比如纯数字命名,但是它们的目录常常是十分有用的,所以它们自身被过滤掉,而目录保留出来。
到目前为止,数据过滤就差不多拉,完全可以通过ini文件来保存个别要过滤的文件,或者须要保留的文件,从而促使程序具有挺好的扩充性。
现在介绍一下Microsoft internet transfer控件登陆FTP站点时涉及的一些操作:
我们先通过添加component来导出该组件,并添加到窗体中,命名为inet1
1),数据采集过程部份
A,在命令发送之前,我们得进行一些初始化操作。
Inet1.URL ‘ftp站点的Url地址
Inet1.RemotePort ‘ftp站点开放的端口号
Inet1.UserName ‘登录用户名
Inet1.Password ‘登录密码
而在窗体初始化的时侯,初始化下边两个属性
Inet1.Protocol = icFTP ‘使用的网路合同
Inet1.AccessType = icUseDefault ‘是否直接联接,这里选择默认,即使用当前IE的设置。
现在介绍命令发送:
Inet1.execute ,“cd ” & “目录”
Inet1.execute ,“dir ”
我们可以通过该控件的execute方执行cd和dir命令来实现登录FTP以及数据遍历操作。
B,控件状态接收端,我们可以在该控件的状态改变风波触发过程中判定状态,并在适当时侯接收数据和处理数据。
Private Sub Inet1_StateChanged(ByVal State As Integer)
Dim filelistTmp as string,filelistArray() as string
If State = 12 Then
filelistTmp = Inet1.GetChunk(0) ‘这里filelistTmp拿来接收文件列表信息
fileArray = Split(filelistTmp, vbCrLf) ‘由于接收到的数据是用换行符分割着的,这样我们用分割函数就可以取得每位文件名
‘这里进行进一步的处理,包括数据过滤数据以及存入临时变量等操作
end if
end sub
2),数据过滤
我们采取的三种方案都是没有经过仔细的统计剖析后作出的,所以可能存在这样的问题:即剔除了个别重要的文件信息。但是权衡利弊后,我们发觉:它对数据库的信息的压缩和优化来说起到了特别重要的作用。因此,目前须要改进的是在对大量站点信息进行统计剖析以及对其他一些相关工作(比如“命名学“方面的知识等)进行学习和研究后得出更科学的过滤方案。但是过滤举措的提出虽然是一个“创举”。我们可以从另外一个角度减低建设搜索引擎站点的成本。
至于具体的实现可以查看源代码,其实只进行了比较简单的比较和判别操作。具体实现时把里面的几个不同级别的过滤方式讲到一个过程里拉。目的是为了日后程序的维护。
3.3数据入库
这里主要是把经过过滤和优化后的数据,即把临时变量中的数据保存到数据库中。这里同样涉及联接数据库和sql句子的执行,具体同3.1。但是操作是比较便捷的,原因是临时变量的结构和数据库中表的结构十分类似。
它主要涉及到对原有站点记录的删掉操作,可以通过myrs.delete和myrs.update来实现;另外还涉及数据的追加操作,可以通过myrs.addnew和myrs.update来实现。
最后这儿有个须要注意的问题:就是在执行记录删掉操作后,库的大小并不会因而而变小,而须要你进行数据库压缩后才能真正释放掉空间,因此我们在每次执行删掉记录操作后专门通过DBEngine.CompactDatabase方式来实现。
至此数据采集过程剖析完毕,具体代码参见源程序。
4. 数据查询
通过数据采集我们获得了查询须要的数据,下面将具体剖析和实现数据查询模块。
数据查询主要包括查询页面的设计、查询程序的编撰和查询结果的返回以及关键字统计等。查询页面由Web服务器提供,用于搜集所要查找的文件信息,用户浏览到此Web页面,填写并递交表单。为减轻Web服务器的工作量,提交时由客户端对关键字进行过滤。表单中需收录文件名信息,另外为便捷用户查找特定类型的文件,设置一个下拉菜单供用户选择文件类型。表单递交给Web服务器以后,由查询程序进行剖析,生成查询句子并执行查询操作,查询结果由查询程序进行统计剖析,并按搜索次数排序、以分页的形式返回给用户浏览。查询结果主要收录文件在第三方服务器上的符号链接地址,以及相关关键字等信息。另外,查询结果的统计信息保存到关键字统计表中。与此同时,还可以据此更新目录表和文件表中的搜索次数数组。
数据查询的具体过程图示如下:
下面详尽剖析和设计WEB递交页面和查询程序。
4.1 WEB递交页面的设计
经过对常用搜索引擎的剖析,发现递交页面都十分简单实用,我们的做法也是这样。下面是我们的递交页面:
通过前面的图片,我们看见递交内容的地方只有三个:关键字输入文本框、文件类型选择下拉框、以及搜索设置复选框。我们就这三个表单元素的作用进行剖析。
A,关键字输入框:这里是用户输入搜索关键字的地方,用户可以输入单个或则多个关键字,另外可以进行模式匹配操作,例如,可以输入“mp3:童年”来搜索文件名为童年的mp3。
B,文件类型选择框: 通过这儿用户可以缩小搜索范围,从而找到更满足自己要求的文件。这里须要详尽解释一下具体的分类情况。
全部:包括所有的目录和文件,需搜索目录表和文件表
目录:只包括目录,仅搜索目录表
一下只搜索文件表,根据文件后缀分类(这里的分类是可以扩充)
图片:jpg,gif,bmp,ico
影音:mp3,rm,wav,wma,mid,wmv,rmvb,mpg,swf,avi,asf
压缩:rar,zip,iso,tar,gz,tgz,tbz,bz2
文档:txt,doc,htm,html,pdf,ppt,chm,pdg
软件:exe,rpm,bin
源码:c,cpp,java,asm
其他:dll,w3x,conf等
C,搜索设置:为了保证搜索结果是有效的,所以设置该项特别有用。它可以尽量保证结果的有效性。
表单的内容设置好之后,就涉及到递交过程拉,提交过程是这样的:
用户单击递交按键或则按下{Enter}键,触发递交风波,并让网页转向表单的action属性所指向的查询程序所在页面。
为了减少WEB服务器的一些负担,我们在客户端通过javascript或则vbscript来对用户输入的关键字进行一定的过滤。比如,过滤掉空串、*敏*感*词*、以及常见字或则成语。
4.2 查询程序
通过数据查询过程图示可以看出,“查询程序”是整个“数据查询”模块的核心。而查询程序本身包括几个大的方面:接收递交页面递交的信息;将接收的信息进行分辨和处理并转换成查询句子;连接数据库并执行查询句子进行查询操作;对查询结果进行分页处理和统计剖析;将结果返回给用户。
为了才能比较透明的描述查询程序,先瞧瞧查询结果页面。
可以看出,这里具体包括查询递交模块、用户搜索的设置以及搜索结果总量、页数,查询过程花费的时间以及返回给用户的文件信息,另外还有相关搜索的显示等。
由于涉及到的内容比较多,我们这儿只简单介绍几个最关键的地方,详细情况参看源代码:
第一部分,时间统计部份,该部份虽然只须要在联接数据库之前先设置一个时间变量,记为SearchStartTime用系统时钟Timer形参,然后在执行完查询句子后用当前的时钟除以SearchStartTime就可以拉。
第二部份,从关键字的接收、查询句子的生成、连接数据库并执行查询句子、通过分页返回结果、关键字的统计几个方面来介绍。
1)关键字的接收有两种方式:
如果查询递交页面中的表单方式属性设成get即method=get。假如我们要接收关键字信息,并设递交页面的相应表单元素名为key,那么可以在结果返回页面(我们命名为search.asp)中用request.querystring(“key”).value来取得。
如果查询递交页面中的表单方式属性设成post即method=post,那么可以在结果返回页面中用request.form(“key”).value来取得。
2)关键字的处理与查询句子的生成
A,多关键字的处理
我们通过asp中的一个分割函数把收录空格的关键字分拆成多个,然后生成查询句子中条件。
B,根据不同的分类来查找不同的表或则不同的数组
之前我们得接收“文件类型”参数,并且定义一个链表,分别储存不同“文件类型”参数对应的文件后缀。然后按照“文件类型”参数的不同取值并结合前面得到的查询条件来生成不同的查询句子。
当文件类型为“全部”时,需要联合查询目录表和文件表。用到SQL查询中的联合查询技术。
另*敏*感*词*。
C,根据接收的“搜索设置”的值来决定是否访问站点表,来获取当前开机的ftp站点编号来限定访问目录表和文件表中对应编号,从而强化里面得到的查询句子的条件。
到这儿查询句子就可以生成拉。
另外,上面提及了模式匹配。这里可以通过剖析关键字中是否收录“:”解析一个“文件类型”值,从而和前面的依据“文件类型”生成查询句子一样进行处理。
3)连接数据库和执行查询句子
在asp中一个比较好的联接数据库的方式是DAO联接:
Set conn = Server.CreateObject("ADODB.Connection")
conn.Open "driver={Microsoft Access Driver (*.mdb)};dbq="+Server.MapPath("库名")
driver是驱动器参数,而dbq是数据库所在的绝对路径,通过Server对象的mappath以及当前路径就可以获得。
至于执行查询句子,就如此简单
set rs = Server.CreateObject("ADODB.Recordset")
rs.open 查询句子(这里是我们在里面生成的查询句子)
4)数据返回和分页显示
这里涉及到查询的效率问题,通过总结剖析Asp优化的方式以及具体实现,发现先用set方式把记录放在内存变量中能有效提升搜索的效率,如:set id=rs(id数组的编号)
然后直接可以在前面通过使用id的值来使用该记录信息。
而分页的设置也有很多举措,但是原理大都一样,我们只介绍具体使用到的分页技术中的一些主要参数:
rs.PageSize 设置每页的记录数
rs.PageCount 总的页数
rs.CacheSize 设置页缓冲区
5)相关搜索显示以及统计剖析
相关搜索是通过访问统计表,查找出与当前查询的关键字近似的关键字信息。
而统计剖析是通过当前查询的关键字来更新关键字统计表。
6)实践过程中引入的一个比较重要的技术
在返回的结果中,提供给用户的联接并不是某个文件或则目录的url地址,而是它在数据库中的索引信息,即文件的父目录编号和所属的站点编号。而这种信息全部储存在目录表中。这样做有两个特别大的益处:能够挺好的提升搜索效率,而且降低服务器的工作量。
如果返回的结果中就是文件的url地址,那么获取url地址的过程将花费好多时间,因为对每位文件都要执行该操作。而且取得每位文件的url地址的过程须要访问数据库的次数都十分大。
而做了前面的处理后,我们可以节约获取url地址的时间,从而可以做大更快把文件信息返回给用户。与此同时,用户假如想下载某个文件,同样可以通过点击联接按键打开一个获取url地址的页面,而这个页面收录地址重定向功能,在访问数据库后找到url地址并引导用户打开该地址。
可想而知,用户的最大操作可能是打开所有的文件。这样的情况数据库的访问量才和一次性给出所有文件地址的操作量相当,但大多数情况下,用户只选择其中的个别结果。因此,该改进对可以显著减少对数据库的访问次数,减少WEB服务器的负荷。
5. 管理与维护
通过数据采集和数据查询模块的剖析和设计,我们基本实现了一个FTP搜索引擎,但是还须要相关的数据更新和维护。
这里的数据更新包括“站点可连接性的测试”,校园网内新开通的FTP站点的登记等,我们这儿是通过winsock控件来实现的。只须要通过它来登入ftp站点就可以拉。
另外,站点采集最好是弄成自动化的,从而较少人为的操作负担。
这样一个相对健全的FTP搜索系统就早已完成拉。
6. 其他功能
通过对其他ftp搜索引擎的剖析发觉,大都有站点快照功能,经过仔细的剖析和设计后,终于完成基于原有的数据库就很快实现拉。
站点快照功能有个益处,可以引导用户快速的浏览某个ftp站点下的文件并进行下载等操作。
这里有两种设计方案:
第一种,“天网”的树状单页结构,这里把文件系统的结构完美的彰显下来拉。而且浏览上去很方便。
第二种,“星空”的表形多页结构,这里虽然只是对表结构的一个简单“翻译”,而且它同我们平常访问ftp服务器看到的界面差不多,只是浏览的数据太能有很大的提升,而且页面排布可以更美观些。
由于时间等方面诱因,暂时本搜索引擎只实现第二种方案。在时间容许的情况将实现第二种方案。
结束语
我们设计的FTP搜索引擎早已在网站上运行了两个多月,为校园网用户提供了挺好的服务。访问量到如今早已超过1万次。最近和usmot共同推出了最新版本——“猎鹰搜索”。对数据采集和数据查询、数据的更新维护、以及WEB页面的设计方面都做了优化,效果比较好,当然也存在一些不足。随着搜索引擎技术的不断发展,我们将继续秉承为校园网增辉、为校园网用户服务的热情继续努力,推出更好的FTP搜索服务。另外,我们准备把该项目转入linux下,作为开源项目来开发,具体准备采用php+c+mysql模式。我们期盼着会有新的收获。
参考文献:
1,张运凯 刘宏忠 郭宏刚 《FTP搜索引擎的设计与实现》
2,(美国)MICROSOFT公司 《Visual Basic 6.0 控件参考指南》
3,《用asp制做强悍的搜索引擎》
4,《SQL参考手册》
5,《ASP基础教程》
... %CA%E9/homepage.htm
6,《ASP网页的优化》
7,歪酷搜索页面风格
其他说明:
1, 该FTP搜索引擎目前的测试地址: