MYSQL FULLTEXT поиск нескольких ключевых слов - PullRequest
0 голосов
/ 01 сентября 2018

У меня есть поле с именем keywords, а сохраненная информация - это ключевые слова, разделенные |

Например:

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

Я пытаюсь выполнить поиск в этом поле и найти результаты, которые содержат хотя бы одно из ключевых слов.

Для этого я использовал MATCH AGAINST в BOOLEAN MODE

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 голосов
/ 01 сентября 2018

Один из способов сделать это с помощью 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.

...