当前位置: 首页 > 工具软件 > Sphider > 使用案例 >

sphider的研究

卫华奥
2023-12-01

      最近学习了模糊查询,以为是什么高深的东西,谁知道就是一个数据库的like查询。继而想继续往深一点的方面学习。查询资料得知,sphider是一个基于php的轻量级站内搜索,于是便高兴阅读源代码,大概明白一个搜索引擎的工作原理。但是,这个sphider由两部分构成,一部分是spider,另一部分是search。


spider爬取部分:

爬取的基本原理是:将文章的文字部分截取,分析,计算关键字的重量等等。这一部分,从源码来看还是有很大的局限性,比如不支持中文。另外,从我的经验来看,明白数据库的作用,也就明白了这部分的流程。


sites-----这个数据库是addsite的时候insert进去的

pending是记录未完成的数据库记录(如果仍然要从未完成的URL里面index,则从这里取得,所以每次调用index_url就会更新pending就是这个道理)

temp是暂时get_link函数搜集到的links

 links是已经取得的被记录下来的函数

keywords是存储所有的关键字,另外,通过关键字的md5算出首位字符转换成十六进制分别存储各个关键字对应的链接

关键函数:

介绍一下index_site这个函数:将所有的keywords收集到数组里面$all_keywords,然后根据$site_id和$reindex判断,
$site_id为空,即从index选项过来,需要插入site数据库,不为空则更新时间,如果有reindex的话,insert到temp以及
 将已经搜集到的links取出放到temp里面。
然后循环层数(level控制循环体)、temp里面搜集到的links数目(count控制循环体)

index_url是搜集索引链接,完成关键字的匹配(可惜从源码看无法匹配中文导致效果不是很好),insert进入link以及将搜集到的links insert到temp里面。

cal_weights函数、getlinks函数。

search部分:

分析搜索的内容,根据搜索的内容搜索关键字(link_keywordn),计算权重,按顺序排列,便可以得到一个类似于百度的搜索功能。


个人觉得有哪些需要改进的内容:

1、增加对中文的支持:可以结合SCWS这个中文分词系统增加对中文的支持。具体修改的地方位于源代码(sphider.php文件里面index_url函数里)的:$wordarray = unique_array(explode(" ", $data['content']));

2、比重的计算可以改进算法:具体修改位置位于源代码(sphider.php文件里面index_url函数里)的:$wordarray = calc_weights ($wordarray, $title, $host, $path, $data['keywords']);其中,可以跟踪得知最终计算比重的是sphiderfuncs.php文件里面的calc_weight函数。



写在最后:就快入职了,没时间搞一些有趣的东西了。自己学得半桶水,总感觉时间不够。对自己的感觉是基础知识不够扎实,这是以后努力并且应该付诸主要精力的部分,看了一篇大牛关于phper的深入学习方向,深以为然,稍后转摘出来。想起十二强赛国足输了后的一句话:但行前路,莫问前程。








 类似资料: