Ответ 1
Чтобы соответствовать точной фразе, просто используйте двойные кавычки, чтобы окружить фразу, чтобы она соответствовала;
SELECT *
FROM products
WHERE MATCH(desc)
AGAINST('"iphone 4s"' IN BOOLEAN MODE)
LIMIT 10
Ниже приведен пример sql, с которым я застрял, он не вернет продукт с именем "iphone 4s", он возвращает еще 10 результатов. Любая помощь будет очень благодарна
SELECT * FROM products
WHERE match(desc) against('+iphone +4s' IN BOOLEAN MODE) LIMIT 10";
Результат: содержит слова "iphone" и "4s"
SELECT * FROM products
WHERE match(desc) against('+iphone 4s' IN BOOLEAN MODE) LIMIT 10";
result: содержит слова "iphone" , но ранжирует строки выше, если они также содержат "4s"
SELECT * FROM products
WHERE match(desc) against('iphone 4s' IN BOOLEAN MODE) LIMIT 10";
результат: содержит слова "iphone" или "4s"
То, что я хочу найти, это "iphone 4s", но он поставляется с другим результатом, например "iphone хорош, но 4s...", "новый iphone 5 опубликовал...",...
Может ли кто-нибудь помочь мне решить эту проблему? спасибо.
Чтобы соответствовать точной фразе, просто используйте двойные кавычки, чтобы окружить фразу, чтобы она соответствовала;
SELECT *
FROM products
WHERE MATCH(desc)
AGAINST('"iphone 4s"' IN BOOLEAN MODE)
LIMIT 10
Используйте REGEXP
SELECT * FROM products
WHERE desc REGEXP 'iphone[[. .]]*4s'
LIMIT 10;