MYSQL FULLTEXT搜索多个关键词

时间:2018-09-01 07:08:49

标签: mysql match against

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

例如:

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

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

为此,我在BOOLEAN MODE中使用了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是我正在寻找的东西。

1 个答案:

答案 0 :(得分: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 bluesky不匹配)。

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