Поиск в MySQL через match() against()

Здравия желаю!

У меня есть поиск который ищет с помощью match() against(). Но проблема в том что он не совсем точно дает результаты. Например если делать поиск «cat» он выводит на первую полосу не кошек, а то что содержит «Category».

Вопрос простой — Как мне сделать LIKE '% cat %' OR tags LIKE '% cat' OR tags LIKE 'cat %' в match() against()

Более подробно:

Теги хранятся в виде «animal cat happy» или "" «inventory categories»

Вот sql на поиск compact disc

SELECT *, MATCH (tags) AGAINST('>>"compact disc" >(+compact* +disc* ) <(compact* disc* )' IN BOOLEAN MODE) as rel FROM icons 
WHERE MATCH (tags) AGAINST('>>"compact disc" >(+compact* +disc* ) <(compact* disc* )' IN BOOLEAN MODE) 
ORDER BY rel DESC


если делать запрос через LIKE приходится делать UNION чтобы распределить данные по релевантности (в случае со словом «cat»)

(SELECT * FROM icons WHERE tags LIKE '% cat %' OR tags LIKE '% cat' OR tags LIKE 'cat %')
UNION
(SELECT * FROM icons WHERE tags LIKE '%cat%')


В этом случае результат выходит получше, но больше нагрузка на сервер если поиск идет по 2м и более словам.

Я пробовал вытащить тэги в отдельную таблицу и создать отношение «many-to-many», но и это загружает сервер больше чем вариант с match against.
  Поиск, match, against
Похожие новости:
Добавлено: 20 Апреля 2018 20:57:42 Добавил: Андрей Ковальчук
Добавить