MySQL在布尔模式下的匹配在中间字上不返回任何内容

时间:2013-09-25 12:16:55

标签: mysql sql match-against

我在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)

但它在查询浏览器中没有返回结果,也没有返回任何错误或警告。

2 个答案:

答案 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);