【问题标题】:MYSQL FULLTEXT search for multi kewordsMYSQL FULLTEXT 搜索多个关键字
【发布时间】:2019-02-07 02:19:27
【问题描述】:

我有一个名为keywords 的字段,存储的信息是一个用| 分隔的关键字

例如:

sky|Banana is good|apple|apple is red|sky is blue|green

我正在尝试做的是在该字段中搜索并找到包含至少一个关键字的结果。

为此,我在布尔模式中使用了 MATCH AGAINST

SELECT * FROM mytable 
WHERE MATCH(kewords) 
      AGAINST ('+sky is blue +Banana is good +otherword' IN BOOLEAN MODE)

但结果出错了,例如它会选择包含+sky is blue 和一个单词sky 的结果

我知道如何在 PHP 中解决这个问题,但我正在寻找 MYSQL 解决方案,我认为 Match AGAINST 是我正在寻找的。​​p>

【问题讨论】:

    标签: mysql match against


    【解决方案1】:

    一种方法是使用LIKE,用分隔符围住搜索词:

    SELECT * FROM mytable
    WHERE CONCAT('|', keywords, '|') LIKE '%|sky is blue|%' OR
          CONCAT('|', keywords, '|')LIKE '%|Banana is good|%' OR
          CONCAT('|', keywords, '|') LIKE '%|otherword|%' 
    

    这确保搜索短语必须完全匹配(即sky is blue 不会匹配sky)。

    如果您希望显示所有短语(而不是任何短语),只需将 OR 更改为 AND

    【讨论】:

    • +1 似乎 LIKE 是做到这一点的唯一方法,但这不是我的情况的解决方案,因为我有很多关键字,我将通过使用 PHP 来解决这个问题,谢谢你的帮助。
    • @user2203703 谢谢。 PHP可能是要走的路。 MySQL 匹配函数并不是针对您的表设置方式而设计的。
    猜你喜欢
    • 2011-10-06
    • 1970-01-01
    • 2013-04-08
    • 2014-08-29
    • 2011-03-17
    • 2010-12-22
    • 2018-12-16
    • 1970-01-01
    • 2010-10-14
    相关资源
    最近更新 更多