我在MySQL数据库中使用Match Against时遇到了问题,我希望有人可以提供帮助。
这是我数据库中数据的示例:
id name
1 really bitter chocolate
2 soft cheese
当我运行此查询时:
SELECT * FROM food WHERE (name) LIKE "%bitter%"
这带回了第一个结果:
1 really bitter chocolate
然而,它是一个更大的查询的一部分,当我运行Match Against代码时,我不会从这些查询中返回任何内容:
SELECT * FROM food WHERE MATCH (name) AGAINST ("bitter")
SELECT * FROM food WHERE MATCH (name) AGAINST ("bitter", IN BOOLEAN MODE)
我打开了全文搜索,当我搜索名称的开头时,它可以正常工作:
SELECT * FROM food WHERE MATCH (name) AGAINST ("really")
SELECT * FROM food WHERE MATCH (name) AGAINST ("really", IN BOOLEAN MODE)
两者都返回:
1 really bitter chocolate
我已经阅读了解决方案:http://dev.mysql.com/doc/refman/5.5/en/fulltext-boolean.html
我看过这里:mysql WHERE MATCH AGAINST
有人可以看看我错在哪里或指出我正确的方向吗?
谢谢!
修改
好的,根据Woot4Moo下面的好答案,我已经更改了我的代码,删除了不应该存在的逗号。我还在+中添加了单引号,但仍然没有运气。
我现在的查询现在看起来像这样:
SELECT * FROM food WHERE MATCH (name) AGAINST ('+bitter' IN BOOLEAN MODE)
但它在查询浏览器中没有返回结果,也没有返回任何错误或警告。
答案 0 :(得分:4)
如果这是您表中唯一的两行,则您在50%的记录中搜索到的字符串,它将被忽略。
答案 1 :(得分:1)
SELECT * FROM food WHERE MATCH (name) AGAINST ("bitter", IN BOOLEAN MODE)
看起来应该是:
SELECT * FROM food WHERE MATCH (name) AGAINST ('+bitter' IN BOOLEAN MODE)
注意我的加号 +
和没有逗号 ,
基于示例here
MySQL可以使用IN BOOLEAN执行布尔全文搜索 MODE修饰符。使用此修饰符,某些字符具有特殊性 意思是搜索字符串中单词的开头或结尾。在里面 在查询之后,+和 - 运算符表示单词是 分别需要出现或缺席才能进行比赛。 因此,查询检索包含单词“MySQL”的所有行 但是不包含“YourSQL”这个词:
mysql> SELECT * FROM articles WHERE MATCH (title,body)
-> AGAINST ('+MySQL -YourSQL' IN BOOLEAN MODE);