我有一个像这样的表:
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
我不确定为什么我会“The Threev Bears”而不是“The Three Bears”? “三”是一个被忽视的词吗?
另外,为什么我会“Twenty / Twenty”但“不要忘记”?这是我想要的唯一结果。
感谢您的帮助!
答案 0 :(得分:1)
你在这里有几个问题,所以让我试着解决它们。
首先,你是对的three
确实是一个被忽视的词。默认情况下,MySQL具有未编入索引的ignored or "stop" words列表。你可以调整它。我们的想法是避免使用非常常见的单词来混淆您的索引,这些单词将返回大部分结果。
要在PHP中转义字符,您应该使用参数化查询,或者至少使用msql_real_escape_string。 Here's a great SO post on the subject
最后,您获得Twenty/Twenty
而不是Don't forget
的原因是因为Don't
也是一个停用词。 TwentyTwenty匹配t*
我相信。