我在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";
答案 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)
因此,使用全文搜索加上这应该是您所需要的,似乎。