繁体   English   中英

MySQL Apostrophe-如何使用MATCH / AGAINST进行转义并返回正确的结果

[英]MySQL Apostrophe- How to escape and return correct results with MATCH/AGAINST

我有这样的表:

TABLE BOOKS
ID   TITLE             SUBTITLE
------------------------------------
1    Don't Forget      
2    Twenty/Twenty      How To Subtitle
3    Red Riding Hood    Another Subtitle
4    The Three Bears
5    The Threev Bears

MySQL是:

SELECT * FROM books WHERE MATCH (titl, subt) AGAINST ('+don\'t*' IN BOOLEAN MODE)

以下查询返回给我(在phpMyAdmin中,我仍然不确定如何在PHP中转义撇号):

   ID  TITLE
   -------------------------------
   1   Twenty/Twenty
   2   The Threev Bears

我不确定为什么要得到“三只熊”而不是“三只熊”吗? “三个”是一个被忽视的词吗?

另外,为什么我会得到“二十/二十”而不是“别忘了” 那是我唯一想要的结果。

谢谢您的帮助!

您在这里有几个问题,所以让我尝试解决。

首先,你是正确的three确实是一个被忽视的词。 默认情况下,MySQL具有未索引的忽略或“停止”单词的列表。 您可以对此进行调整。 这样做的目的是避免用非常常见的单词使索引混乱,以免返回很大一部分结果。

要在PHP中转义字符,您实际上应该使用参数化查询,或者至少使用msql_real_escape_string。 这是一篇关于该主题的出色文章

最后,您得到Twenty/Twenty而不是Don't forget的原因是因为“ Don't也是一个停用词。 TwentyTwenty在我相信的t*上是匹配的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM