【问题标题】:MySQL Match Against In Boolean Mode returns nothing on middle wordMySQL Match Against In Boolean Mode 在中间字上不返回任何内容
【发布时间】:2013-10-01 00:44:05
【问题描述】:

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

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

【问题讨论】:

  • 我更新了我的答案,以指出您的副我的查询中的差异。
  • 你现在收到错误还是其他什么?

标签: mysql sql match-against


【解决方案1】:

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

【讨论】:

    【解决方案2】:
    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 执行布尔全文搜索 模式修饰符。使用此修饰符,某些字符具有特殊 搜索字符串中单词开头或结尾的含义。在里面 在查询之后,+ 和 - 运算符表示一个词是 需要分别存在或不存在才能进行匹配。 因此,查询检索包含单词“MySQL”的所有行 但不包含单词“YourSQL”:

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

    【讨论】:

    • 谢谢我完全错过了逗号,但不幸的是它仍然不适合我:(
    • @hollie3406 你能试试单引号吗?我知道这不重要,但为了完整起见:)
    • 没问题 - 我的查询现在看起来像这样:SELECT * FROM food WHERE MATCH (name) AGAINST ('+bitter' IN BOOLEAN MODE) 但它仍然返回为空:(
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-24
    • 2012-05-22
    相关资源
    最近更新 更多