使用mysql忽略#character的全文搜索

时间:2014-02-19 16:24:33

标签: mysql full-text-search sql-like

我在personaldreamjournal.com上写了一个简单的日记/期刊在线申请。您可以使用名称来宾和密码用户登录演示模式进行测试。

它使用LIKE对日记中的单词进行全文搜索。我想添加允许主题标签以便轻松标记条目的功能。就好像有人输入#workout一样,它会返回带有#workout标签的所有条目。但显然不是那么容易,因为它似乎忽略了标签。 (不知道为什么他们会忽略文本框中的任何字符??,但生活也是如此)。

因此,所有带有“锻炼”一词的条目都将被返回,因为#将被忽略。 我只是希望确认,从我到目前为止搜索到的内容,因为没有特别提到#字符。

所以我假设#是一个特殊字符,由于某种原因被忽略了? 而且我要改变它我必须改变某处的MYSQL配置?究竟在哪里#字符?

任何帮助确认我说的是真的,以及如何允许#character被计入返回结果,我们表示赞赏。

更新: 下面是我正在使用的实际代码。所以我没有使用LIKE

  $query_Recordset1 = "SELECT *, MATCH(`scroll`.text) AGAINST (+'$searchstring_Recordset1'     IN BOOLEAN MODE) AS score FROM scroll WHERE MATCH(`scroll`.text) AGAINST('+$searchstring_Recordset1' IN BOOLEAN MODE) having score > 0.2 AND user = '$username' ORDER BY score DESC";

1 个答案:

答案 0 :(得分:3)

Norman,使用LIKE关键字未使用全文搜索。您必须将文本字段设置为具有全文索引。 (我相信MyISAM表)然后,做这样的事情:

Select * From table Where (MATCH (field) AGAINST ('keyword' IN BOOLEAN MODE) > 0);

这将为您提供匹配的所有结果。

如果您希望他们拥有排名顺序以及退回的排名,您可以执行以下操作:

Select *, (MATCH (field) AGAINST ('keyword' IN BOOLEAN MODE)) As rank From table Where (MATCH (field) AGAINST ('keyword' IN BOOLEAN MODE) > 0) Order By (MATCH (field) AGAINST ('keyword' IN BOOLEAN MODE)) Desc;

多次使用全文搜索不会减慢您的查询速度,我读过,因为MySQL认为它是相同的搜索,只是使用相同的结果。

此外,如果您只想要使用LIKE关键字的答案,我们需要查看原始查询。

修改

看起来这个人和你有同样的问题并且已经解决了。

MySQL Full-Text search for hashtags (including the # symbol in index)

因此,使用全文搜索加上这应该是您所需要的,似乎。