Полнотекстовый запрос SQL работает только для первого ключевого слова

Я не эксперт по полному текстовому поиску, поэтому я немного погуглил SQL-запрос Сортировка по релевантности и придумал это, что несколько работает:

SELECT *, MATCH(fulltext_tags) AGAINST ('+blue' '+red') AS relevance FROM `products` WHERE MATCH(fulltext_tags) AGAINST ('+blue' '+red' IN BOOLEAN MODE) ORDER BY relevance DESC

Проблема в том, что учитывается только первое ключевое слово.
Скажи, у меня есть эта таблица продуктов

+----------+------------------+
|   name   |  fulltext_tags   |
+----------+------------------+
| Product1 | Blue             |
| Product2 | Red              |
| Product3 | Blue Red         |
| Product4 | Yellow           |
+----------+------------------+

Приведенный выше запрос возвращает только продукты 1 и 3, он полностью игнорирует второе ключевое слово + красный. Даже добавление + Желтый в качестве третьего ключевого слова все равно игнорирует его, поэтому он игнорирует все, что находится за первым ключевым словом …

Как сделать так, чтобы запрос с + синим и + красным возвращал Product1 Product2 и Product3, так как в поле fulltext_tags фигурирует хотя бы одно или оба ключевых слова?

Спасибо

1

Решение

Вы должны использовать REGEXP '[[:<:]]Red[[:>:]]' Чтобы найти точное слово, попробуйте запрос ниже, надеюсь, он будет работать и выполнить ваше требование.

SELECT * FROM `products`
WHERE fulltext_tags REGEXP '[[:<:]]Red[[:>:]]'
OR fulltext_tags REGEXP '[[:<:]]Blue[[:>:]]';

Ты можешь видеть ДЕМО здесь.

Обновление 1

Попробуйте этот запрос, как я вижу, вы хотите сделать что-то вроде этого,

SELECT *,
MATCH(fulltext_tags) AGAINST ('+blue' '+red')
AS relevance FROM `products`
WHERE MATCH(fulltext_tags) AGAINST('Red')
OR MATCH(fulltext_tags) AGAINST('Blue')
ORDER BY relevance DESC

Посмотреть здесь ОНЛАЙН ДЕМО

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]