Оптимальный алгоритм поиска

docker

Новичок
Оптимальный алгоритм поиска

Добрый день!

Проблемма следующая. Как сделать единым запросом поиск по содержимому полей базы данных, чтобы он:
1) Искал каждое слово в каждом поле (с помощью LIKE)
2) После разделения слов, не искал всякие предлоги, типа "на", "под" и т.д. Т.е. не искал по слову исходного запрашиваемого текста, если оно меньше например 3 символов.

Первая аспект реализуется, например, так:
Исходная стока запроса разбивается на отдельные слова:
$array_query=explode(' ',$clear_query);

Затем в качестве разделителей добавляется уже синтаксис MySQL, чтобы напрямую вставлять это в текст запроса:
$in_mmenu=implode ("%' or LOWER(mmenu.name) like '%", $array_query);

$in_classes=implode ("%' or LOWER(classes.name) like '%", $array_query);

$in_instrums1=implode ("%' or LOWER(instrums.name) like '%", $array_query); и т.д.

И затем это вставляется в запрос:

$query.="WHERE (LOWER(mmenu.name) like '%".($in_mmenu)."%' OR ";
$query.="LOWER(classes.name) like '%".($in_classes)."%' OR ";
$query.="LOWER(instrums.name) like '%".($in_instrums1)."%' OR ";
$query.="LOWER(instrums.type) like '%".($in_instrums2)."%' OR ";
$query.="LOWER(instrums.purpose) like '%".($in_instrums3)."%')";

Но, вот здесь и возникает вторая проблемма. Например, если ищется что-то вроде "клапана для того-то с таким-то", то поиск будет реагировать на все эти предлоги "с", "для" - по всем указанным столбцам! А это не совсем корректная работа поиска.

Самое травиальное решение - из PHP убирать из массива $array_query все эти предлоги. Но ведь все не предусмотришь, да и то что вспомнишь - уже получится немало кода.

Как-то по иному можно это решить?
Спасибо
 

Quidle

Полноценный новичок
А srtlen-ом проверить строку и только после этого впихивать её в условия поиска ?
Для предлогов, длиннее нужной величины можно создать массивчик и проверять слово ещё и на принадлежность к ентому массивчику.
Или я не так понял вопроса ?...
 
Сверху