【转】PHP全文检索

这段时间在研究中文的全文检索,大概思路终于有所了解。
所有搜索引擎都是基于全文检索技术来实现的,主要有如下步骤
1.抓取:
一种被称为Spider(蜘蛛)的程序会定时不断的以一个起始页面进行网络搜索,将得到的网页内容保存到本地的机器上。
2.索引:
该 步骤也可以由Spider程序在抓取的同时进行索引,索引是一种记录了文件地址和关键词对应的列表文件。作用相当于书的目录,可以更加快速的找到指定的记 录。索引程序会将Spider程序抓取的网页文件逐一分析,将内容分割为大量的词组,然后将词组与文件地址以对应的形式保存到索引文件当中。
索引程序也是定时更新的,检查内容是否更新,是否为死链。获得新的内容时同样需要更新索引。有的搜索引擎索引更新时间为1个月,有的更长。
3.搜索
一切数据准备好以后,剩下的工作就是提供用户搜索的接口了,系统会将用户输入的关键词进行分割,然后从索引文件中进行关键词的搜索,以确保找到对应的网页地址。

基于中文的搜索比英文要麻烦的多,因为英文都是以空格分割单词的,程序可以以空格来分割关键词,而中文是以字为单位的。要想正确的将句子分割成有意义的词组还需要特殊处理。好在现在的中文分词技术已经比较成熟了,至于分词的原理我就不说了,网上的资料还是很多的。

了解了基本概念以后就是实践了,在网上找到了PHP的分词程序,试验了一下,速度还算可以。决定采用它来进行解析。
1.用分词程序将不老歌的主题和内容进行分词,将结果保存在索引表中,
索引表的结构 topic_id(文章ID), keyword(关键词), weight(权重),
同一篇记录的重复词语进行累加记数,做为权重。
2.搜索时,如果关键词小于2个字,则直接进行搜索,否则将关键词进行分割,在索引表和topic表中查找关键词对应的文章,按权重倒排并输出。

不 老歌主题大概有12000条记录,昨天对12000条记录进行索引,居然到9400多的时候不在索引了,有可能是分词程序的问题,其它的还不清楚。大概用 了3个多小时,由于无可比较的程序,可以也无从判断快慢与否,9400多的主题生成的索引表为120多万条记录,大小为30M左右,数据量可真不小。

用关键词“许巍”进行测试,使用索引表查询时耗时大约0.006-0.008秒,
直接使用“LIKE”方法无索引查找耗时大约0.6-0.7秒,

用关键词“青春”进行测试,使用索引表查询时耗时大约0.02-0.03秒,
直接使用“LIKE”方法无索引查找耗时大约0.4-0.5秒,

用关键词“许巍 蓝莲花 故乡”进行测试,使用索引表查询时耗时大约0.02-0.03秒,
直接使用“LIKE”方法无索引查找耗时大约0.7-1.2秒不等,

从测试结果看,有关键词索引应该在速度上要快得多。如果数据量大的话,两者的差异应该更明显。但有的结果差别不是不大,好像结果匹配记录越多,两者的速度差异越小。具体原因有待研究。

【转】PHP全文检索

2 条评论在 “【转】PHP全文检索

  1. 有没有关于全文搜索具体实现或正则表达式代码呀。发上来大家一起研究研究。还有,如果要在自己的网站上面怎么实现全文搜索,我知道方法有多种,楼主,能否把这些技术分析一下优缺点。

  2. 初级篇:Zend Framework 环境配置以及第一个Hello World 输出! 2.初级篇:Zend Framework 怎样连接数据库并执行增,删,查,改? 3.初级篇:Zend Framework 如何写一个基本功能的留言本? Zend Framework怎样结合Fckeditor编辑

发表评论

电子邮件地址不会被公开。 必填项已用*标注

滚动到顶部