建站经验 experience
当前位置:首页 > 网站建设专题 > 建站经验
PHPCMS全文搜索优缺点分析及问吧相关问题实现方法
发布日期:2011-08-22 阅读次数:688 字体大小:

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分词处理获取关键词。

具体代码实现如下:

<?php

//落叶添加相关问题搜索

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行前添加如下代码:

相关问题

<ul>

{loop $related $n $v}

<li>{$v'title'}</li>

{/loop}

</ul>

作者:落叶(t.qq.com/guohui) 网站:http://www.pmume.com

落叶原创首发CHINAZ,尊重版权,转载请保留作者信息及链接。

感谢 落叶 的投稿