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>
复制代码 |