2014-02-19 196 views
0

所以我在personaldreamjournal.com上写了一个简单的日记/日志在线应用程序。您可以在演示模式下登录,以使用名称来宾和密码用户进行测试。用mysql全文搜索忽略#字符

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

因此,带有单词锻炼的所有条目都会被返回,因为#被忽略。 我只是想确认,从我迄今为止搜索到的东西,因为没有具体提到#字符。

因此,我假设#是一个特殊的字符,由于某种原因被忽略? 和那我改变它我必须改变MYSQL配置的地方? #字符究竟在哪里?

任何帮助确认即时消息说的是真实的,以及如何允许#字符计入返回结果,赞赏。

更新: 下面是我使用的实际代码。所以我没有使用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"; 

回答

3

诺曼,使用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)

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

+0

感谢詹姆斯的真棒回应。如果符合我的需求,我将实施您的代码版本并回报。赞赏。 –

+0

@NormanBird没问题。 :) – James

+0

so @James,好像我已经在使用类似于您所建议的内容了,这似乎是最佳做法,可能是为什么我使用它:o),现在仍然面临如何在搜索中使搜索符合hashtag# ,现在它忽略它。我必须改变某个地方,不知道是什么。 –