荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: PhilCF (起床.挂站.TSG.下站.睡觉), 信区: NetResource
标  题: 毕业论文四、d搜索服务模块[ZZ]
发信站: 荔园晨风BBS站 (Tue Jun 25 19:11:46 2002), 转信

发信人: chenhua (陈华), 信区: FtpSearch
标  题: 毕业论文四、d搜索服务模块
发信站: 天网搜索论坛 (Wed May 29 22:34:48 2002)

d)      搜索服务模块


i.      搜索服务过程说明

    服务器是系统的核心,必须保证稳定性和高效性。实现高效性的关键在于使用线程
,即一个用户请求使用一个线程处理。由于用户的搜索请求具有随机性和并发性,因而
线程互斥、死锁预防、资源的管理等是服务器必须解决的重要问题。另外,对于由于某
种原因(如内存不足、I/O错误等)不能正常完成搜索任务的线程,必须正确而完整的
释放它申请的资源(如申请的内存、打开的文件、打开的Socket以及线程本身),并向
用户显示不能完成任务的原因。安全性也是服务器要考虑的一个方面。服务器采用了
TCP/IP作为与CGI通讯的协议,因而可能存在其它程序乃至网络黑客的非法连接。我们
可以采用一种简单的身份验证机制保证安全,即CGI与服务器连接时先输入一个约定口
令,若口令错误,则服务器直接关闭这个非法连接,从而确保了服务器的安全性。
    服务器会接收到来自CGI的搜索请求或搜集建库程序的更新数据库请求,接到更新
数据库请求后,服务器暂停接收CGI的搜索请求,读入新的数据库,然后继续对外服务
。接到搜索请求时,由CGI发送来的请求信息确定要匹配的串和过滤信息。由搜索串检
查Cache是否命中(Cache是以搜索串为文件名,以匹配结果的所有ID为内容的文件),
若命中,读入Cache,进行信息过滤,输出结果。否则,重新在数据库里查找,将结果
过滤输出,然后将没过滤的结果ID串写入以搜索串为文件名的Cache文件中。输出结果
给CGI时,由ID找到对应的文件信息记录,并由文件信息记录找到文件名与路径,最后
以字符串格式发给CGI。服务器响应总流程如图4:


ii.     服务接口说明

    服务接口是一个Socket接口,CGI程序或者搜集建库程序用它与服务器通讯。当搜
集建库程序要求服务器切换数据库时,它只需在对应的Socket端口发一个字符格式的“
****Ftp Stop***”命令即可。当用户查询时,CGI在这个端口写一个SearchStruct结构
,以给出查询参数。当然,在给这个端口写数据前有一个用户校验过程,以保证服务器
的安全性。SearchStruct结构定义如下:

typedef struct
{
 char tomatch[32];               //匹配串
 long sites[4];                   //受限站点的编号
 bool CaseSensitive;              //大小写敏感标志
 bool ExactSearch;               //精确匹配标志
 char searchtype;   //搜索类型:0为简单搜索,1为复杂匹配(有附加条件)
 char filetype;                   //受限文件类型
 long begintime,endtime;          //受限时间范围,如1999年2月为: 19990200
 long beginsize,endsize;           //受限大小范围
 long showfirst,showmax,resultnum; //显示起始点,最大显示数,结果总数
}SearchStruct;//


iii.    匹配算法

    查找是基于数据库里双子母倒排表的操作,通过提取两条索引中高24位(ID值)相
等、低8位(字母在文件名中的偏移)有确定差值的索引项获得结果。具体而言,对连
续的三字母串(如 abc ),取后一双字母索引(bc)与前一双字母索引(ab) 中ID相等
的项,若后一索引(bc)中的偏移大1,则为所求结果的一项。而对于 ab?cd、ab??cd
等,则取偏移大于2、大于3即为所求结果。对于ab*cd, 则要求在后一索引(cd)中的
偏移大于它在前一索引(ab) 中的偏移。


iv.     Cache策略

    为了加快速度和实现结果中过滤的功能,我们把搜索结果暂存在Cache,以便下次
使用。Cache保存的是字符串匹配的结果,而不是过滤后的结果。用文件形式保存结果
索引做为Cache,以匹配串的16进制码作为文件名存放在<cache>目录下。Cache文件的
存在周期为2个小时,每隔两个小时服务器自动删除所有最后访问时间超过两个小时的
Cache文件。
    另外,在CGI参数里我们有一个结果总数,这个结果总数有SearchStruct结构传递
到服务器。当服务器发现ResultNum不为-1时,就假设这个ResultNum是已知的结果总数
。这样进行匹配结果的属性过滤时就没有必要从头过滤到结尾,只需过滤到需要显示的
范围(showfirst…showfirst+showmax)就可以了。这是一个虚的Cache策略。
    应用Cache的效果是十分显著的。例如查询“c*.jpg”时,如果Cache没有命中是
1734毫秒查出45417个结果,Cache命中时是31毫秒,当CGI参数里把结果总数加进去时
是16毫秒。由此可见Cache是多么重要。


v.      强大的过滤功能的实现

1.      文件类别过滤

    文件类别过滤功能是基于文件分类。在搜集程序建立素材库的时候,就对每个文件
条目的文件类型进行归类,目前文件类型分类分成图象、声音、视频、压缩、文档、程
序、源代码、目录和其它。在建库的时候,文件类型信息写入每个文件条目的Content
库的结构里。当字符串匹配完成进行文件类别过滤的时候,只要SearchStruct.
Searchtype与FileContent.filetype相等或者SearchStruct. Searchtype为0即所有类
型则过滤成功,这个条目就作为结果的一项输出给用户。

2.      文件大小过滤

    缺省的大小过滤是0到1.G的范围。用户可以用复杂查询表单指定起始大小和终止大
小范围,利用Content库里的文件大小属性,过滤匹配串的结果得到最终结果。

3.      文件最后修改时间过滤

    缺省的时间范围是1980-2050年之间,时间范围的指定可以精确到特定的日期。实
现上使用Content库的最后修改时间过滤实现。

4.      站点过滤

    站点限制是我们的ftp搜索引擎比较有特色的功能,实现上比较简单,关键是给每
个ftp站点一个编号。在最后的结果过滤时,把站点范围合适的结果输出即可。

5.      精确匹配

    精确匹配的实现的判断比较复杂,当匹配串里没有*且没有使用“与”、“并”操
作或者结果中查询时,精确匹配才是有可能的。这时将匹配串的长度与Content库里的
filenamelen文件名长度作比较,如果相同则精确匹配通过。


vi.     对“与”、“并”、*、?操作以及结果中再搜索的支持

    在ftp搜索引擎里提供“与”、“并”、*、?操作以及结果中再搜索相对其他ftp搜
索引擎里是比较有特色的,因为很多ftp搜索引擎并不支持这些十分常用的传统上只有
WWW搜索引擎才有的功能。“与”的操作符是空格,“并“的操作符是逗号,结果再搜
索的分割符是char(3),由CGI程序产生这个分割符。这样,无论怎么样的搜索度都可以
把它的字符串匹配项放再一个字符串里。比如要查 *.rm 或者*.mpg 结果里的“
american pie”,则这个查询串的最终形式是:“american pie”+char(3)+“*.rm,
*.mpg”。在系统实现是,对这个字串的解释是顺序的,也就是得到“american pie”
这个当前查询项,然后发现需要在结果“*.rm,*.mpg”里查询,则在Cache里找到“*.
rm,*.mpg”的查询结果,因为这个结果是必然存在的,否则就不能算是结果中查询了。
将“american pie”的查询结果和“*.rm,*.mpg”的查询结果合并,就得到在“*.rm,
*.mpg”里查询“american pie”的结果了。而在实现“american pie”的查询时,则
用 * 代替空格,以实现与的操作。而实际上用户也正需要这个操作。

--

※ 来源:.天网搜索论坛 http://binglebbs.dhs.org[FROM: 162.105.80.74]

--

      WELCOME TO PC's Home  HTTP://192.168.48.84

※ 来源:·荔园晨风BBS站 bbs.szu.edu.cn·[FROM: 192.168.48.84]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店