找回密码
 注册
查看: 1119|回复: 0

PHPCMS全文搜索优缺点分析及问吧相关问题实现方法

[复制链接]
发表于 2011-9-4 17:21:28 | 显示全部楼层 |阅读模式
PHPCMS2008内置的搜索功能除了支持标题搜索外,还支持全文模糊搜索,并且支持按照相关度排序,很多站长朋友们直接希望使用他来制作一个小型的搜索引擎。  


  
看似非常强大的搜索功能,那么在实际使用中存在哪些具体的优点和不足呢?  
优点:  
全文模糊搜索,搜索词可以单个关键词,也可以是句子。当输入较长的关键词,会自动经过分词处理后到数据中模糊查询,不会出现像其他CMS那样非得完全匹配才能搜索到结果的情况;  结果按相关度排序。这点体验不错,能够把最相关的结果展示给搜索用户,大大提高站内搜索体验。对搜索有特殊要求的用户,基至可以利用之来打造强大的个性化搜索与相关搜索。  
不足:  
1.需要开启全文索引,而MYSQL全文索引的开启需要有服务器权限  
Mysql  默认的最小索引长度是4。中文绝大部分词都是2个字符,这就导致小于4个字的词都不能被索引,需要在[mysqld]后面加入一行“ft_min_word_len=1”,然后重启Mysql,再登录网站后台(模块管理->全站搜索)重建全文索引,否则将无法使用全站搜索功能。而普通虚拟主机商一般不太愿意为个别用户需修改MYSQL配置,普通站长不方便使用。  
2.搜索相关表phpcms_search频繁损坏  
PHPCMS后台发布的每篇文章全文内容都会经过分词处理,将整篇文章切分成以空格隔开的一个个词组后存入搜索相关的表phpcms_search中,以方便作搜索处理,实现使用这个表经常性损坏,运气差的时候,一天损坏两三次。  
3.内容删除后搜索结果中仍然存在  
在后台全文搜索模块建立全文索引后,每篇文章会以标题、网址、摘要的形式按文章ID缓存成PHP数组文件,当后台文章删除后,PHPCMS并没有把这些缓存文件关联删除,结果导致,文章删除了,搜索结果中仍然可以搜索到。  
下文中落叶以问答模块为例来说明如何借助PHPCMS的全文搜索功能制作相关问题。  


  
一般的CMS中的相关文章都是通过关键词标签来实际相关文章推荐的,但很多时候发文章时如果没有关键词或者关键词是自动提取的,相关文章效果不会太好,尤其是像问答模块这样的用户创造内容的网站,需要实现相关文章,一般不好通过关键词来关联相关文章。  
PHPCMS中开启全文索引后,每次发布文章时文章的内容都会被通过分词处理后记录到phpcms_search中,当用户在搜索框中输入关键词或者句子时,先经过PHPCMS分词处理后,再到phpcms_search中查询并作相关度计算,按照相关度返回查询结果。要利用他的搜索功能来制作相关搜索,我们需要实现的是传入关键词,并自动搜索,那对于没有关键词字段的模块,那么我们可以直接传入标题,让他经过PHPCMS分词处理获取关键词。  
具体代码实现如下:  

//落叶添加相关问题搜索  
require '../search/include/search.class.php';//引用PHPCMS搜索处理类  
$s = new search();//实例化类  
$s->set(80,100,'red');//标题取80字,摘要取100字  
$s->set_type('ask');//设定模块  
$q = safe_replace($title);//对标题过滤处理  
$q = new_htmlspecialchars(strip_tags($q));  
//echo $q;exit;  
$related = $s->q_s($q,0,1,10);//获取相关问题  
?>  

在PHPCMS问答模块内容页show.php中倒数第7行前添加如下代码:  
相关问题  

      
    {loop $related $n $v}  
  • {$v['title']}  
    {/loop}  
  

作者:落叶(t.qq.com/guohui) 网站:
http://www.pmume.com
  
落叶原创首发CHINAZ,尊重版权,转载请保留作者信息及链接。                  
                 
                感谢
落叶
的投稿
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

QQ|Archiver|手机版|小黑屋|鼠窝站长论坛

GMT+8, 2024-12-29 00:21 , Processed in 0.060953 second(s), 16 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表