2

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

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

4

2 回答 2

5

如果这是您的表中仅有的两行,那么您在 50% 的记录中包含搜索字符串,它将被忽略。

于 2014-02-27T21:13:23.907 回答
2
SELECT * FROM food WHERE MATCH (name) AGAINST ("bitter", IN BOOLEAN MODE)

看起来应该是:

SELECT * FROM food WHERE MATCH (name) AGAINST ('+bitter' IN BOOLEAN MODE)  

注意我的加号 +无逗号 ,

基于此处的示例

MySQL 可以使用 IN BOOLEAN MODE 修饰符执行布尔全文搜索。使用此修饰符,某些字符在搜索字符串中单词的开头或结尾具有特殊含义。在以下查询中,+ 和 - 运算符分别表示需要出现或不存在单词才能进行匹配。因此,查询检索包含单词“MySQL”但不包含单词“YourSQL”的所有行:

mysql> SELECT * FROM articles WHERE MATCH (title,body)
    -> AGAINST ('+MySQL -YourSQL' IN BOOLEAN MODE);
于 2013-09-25T12:20:29.620 回答