Подскажите как правильно написать FullText поиск последовательности символов.
Ищем в тексте:
Газонокосилка электрическая WORTEX LM 3213-1 P бензиновая
текст запроса:
LM32131P
LM 32131P
LM 3213 1P
И поиск слов в любой последовательности но чтобы они все были рядом друг с другом:
Ищем в тексте:
Ноутбук Acer Extensa 15 EX215-31-P41T NX.EFTER.006 15"(Intel Pentium Quad Core N5000 1.1 ГГц4 ГБ)
текст запроса:
31 P41T EX215
P41T EX215 31
EX215-NX-31-P41T - вот такой запрос не должен найтись в тексте т.к не все слова будут стоять рядом друг с другом
Пока использую такие запросы, но они находят не все нужные результаты и могут находить лишние не нужные:
SELECT * FROM products WHERE MATCH(ProductName) AGAINST('"LM 3213 1 P"' IN BOOLEAN MODE);
Или для поиска всех слов вот такой:
SELECT * FROM products WHERE MATCH(ProductName) AGAINST('+EX215 +31 +P41T' IN BOOLEAN MODE);
Не знаю насколько подходит Mysql в этом случае. Почему не взять поисковые движки Solr/Sphinx?
Модель товара в любом случае трудно искать. Ее скорее стоило бы искать алгоритмом Левенштейна. А вот название товара должно хорошо находиться поисковыми движками.
Название товара первично, а модель имеет второстепенное значение при поиске товаров в магазине.
Это не для клиентского поиска товаров по названию, нужно искать именно модели и находить их нужно точно, т.к бывают различные варианты написания слитно/раздельно/через разделители лишняя буква будет означать уже совершенно другую модель.
baimkin, тогда можно пробовать вычленять модель из поискового запроса и приводить к некоторому каноническому виду, который искать как есть, WHERE model = 'LM 3213-1 P'
"Газонокосилка электрическая" - описание товара
"WORTEX" - бренд
"LM 3213-1 P" - модель
"бензиновая" - противоречит характеристике "электрическая", а, значит - шум.
По бренду и модели можно найти точное описание товара, а если наоборот, то нужно найти любые бренды по описанию товара.