找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1954|回复: 1

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

[复制链接]
发表于 2011-8-22 22:37:12 | 显示全部楼层 |阅读模式
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分词处理获取关键词。

具体代码实现如下:
  1.     <?php

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

  3.     require '../search/include/search.class.php';//引用PHPCMS搜索处理类

  4.     $s = new search();//实例化类

  5.     $s->set(80,100,'red');//标题取80字,摘要取100字

  6.     $s->set_type('ask');//设定模块

  7.     $q = safe_replace($title);//对标题过滤处理

  8.     $q = new_htmlspecialchars(strip_tags($q));

  9.     //echo $q;exit;

  10.     $related = $s->q_s($q,0,1,10);//获取相关问题

  11.     ?>
复制代码
在PHPCMS问答模块内容页show.php中倒数第7行前添加如下代码:

相关问题
  1.    <ul>

  2.     {loop $related $n $v}

  3.     <li>{$v['title']}</li>

  4.     {/loop}

  5.     </ul>
复制代码
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|Archiver|手机版|小黑屋|王牌互联

GMT+8, 2024-11-23 07:42 , Processed in 0.027459 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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