storytlr 支持搜索标题和内容

storytlr 搜索很奇怪,比如我有一篇文章,标题为“QQ for Linux 新版本终于发布了”,内容为“发布了发布了等等等。。。。。很多字符哈哈哈”,我在搜索框里搜索以下内容可以搜到这篇文章:“Linux”、“QQ for Linux”、“新版本终于发布了”,但是搜索以下内容搜不到这篇文章:“Linu”、“QQ for”、“版本”、“新版本终于发布”。这就奇怪了,于是查看代码,在源文件

./protected/application/admin/models/Data.php

的 236 行可以看到,采用的搜索方式是 MATCH,并不是 LIKE,之前没见过 MATCH,于是查看 MySQL 官网,点击这里这里

Any word that is too short is ignored. The default minimum length of words that are found by full-text searches is four characters.

也就是说会省略小于等于 4 个字符的词会省略,所以搜索“QQ for” 搜索不到。

The FULLTEXT parser determines where words start and end by looking for certain delimiter characters; for example, “ ” (space), “,” (comma), and “.” (period). If words are not separated by delimiters (as in, for example, Chinese), the FULLTEXT parser cannot determine where a word begins or ends.

中文词与词之间没有像英文那样有个空格隔开,所以 “新版本终于发布” 和 “新版本终于发布了” 并没有匹配,它认为是两个不同的词。

找到问题所在了。为了满足我的要求,我改代码为使用 LIKE 进行搜索,并且,它默认只搜索标题,不搜索内容,我对 SQL 语句作了如下改动。

Data.php 文件的 234 到 242 行内容为:

更改为:

我无视了 search 函数的 $index 参数,直接在 SQL 语句里用 title 替代了。

暂时一切运行正常。可以正常搜索,可以搜索文章标题和内容。

对于 MATCH AGAINST ,如果我理解有误,请看官指点。如果有更好的解决方法,请告之~

storytlr 登录出现问题,删除 apc 后正常

昨天开始,安装在服务器上的 storytlr 出现问题,登录的时候,页面不给任何反馈,查看 apache 错误日志也没有错误产生,查看程序自带的错误记录,也没能看出任何问题。但是我本地也安装来一个 storytlr 正常运行,没有出现这个问题,代码都是一样的,按说不应该啊。于是我对比来一下本机和服务器 phpinfo() 的输出,发现服务器多加载一个 apc 扩展,抱着试一试的态度,我将服务器的 php-apc 扩展删除了,重启 apache2 服务,正常,搞定!不知道为什么会这样,我对 storytlr 代码不熟,对它使用的 zend framework 也没用过,还真有点没底呢,不过现在问题解决了就好。

为什么会出现这个问题呢?

storytlr 安装出现错误

出现错误:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘) ENGINE=MyISAM DEFAULT CHARSET=utf8’ at line 19

经检查出错文件是:

protected/install/database/update/003/add_mentions_table.sql

该 SQL 语句多了一个逗号,将 UNIQUE KEY item USING BTREE (source_id, item_id, url), 后的逗号去掉即可。