小编典典

MySQL Match布尔模式对中间词不返回任何内容

sql

我在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哪里匹配

有人可以请问我出了什么问题或向正确的方向指出吗?

谢谢!

编辑

好的,按照下面的Woot4Moo很好的答案,我已经更改了代码以删除不应该在那里的逗号。我还添加了+并将其放在单引号中,但仍然没有运气。

我当前的查询现在看起来像这样:

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

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


阅读 45

收藏
2021-04-28

共1个答案

小编典典

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修饰符执行布尔型全文本搜索。使用此修饰符,某些字符在搜索字符串中单词的开头或结尾具有特殊含义。在下面的查询中,+和-运算符表示要出现匹配,分别需要一个单词存在或不存在。因此,查询将检索所有包含单词ySQL''但不包含单词ourourSQL’‘的行:

mysql> SELECT * FROM articles WHERE MATCH (title,body)
    -> AGAINST ('+MySQL -YourSQL' IN BOOLEAN MODE);
2021-04-28