[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Поисковый запрос
sforce
Здравствуйте, товарищи.
Ситуация такая. Хочу сделать поиск ко каталогу продукции. К примеру человек ищет деталь с названием "АБВГД-73В-15-А". Но в базе она называется "АБВГД-73-В 15А". Так вот, деталь одна и та же, но если искать обычным LIKE%...% то ничего не найдется.
Я решил выйти из положения следующим образом, но потом подумал реально ли это)
Допустим А это ячейка строки в базе, Б - поисковый запрос. И в поиске (SQL-запросе) я буду сравнивать не А и Б, а:
НЕКАЯ_ФУНКЦИЯ_УБИРАЮЩАЯ_ПРОБЕЛЫ_И_ДЕФИСЫ(А)
и
НЕКАЯ_ФУНКЦИЯ_УБИРАЮЩАЯ_ПРОБЕЛЫ_И_ДЕФИСЫ(Б)
Тогда:
"АБВГД-73В-15-А"
и
"АБВГД-73-В 15А"
станут одним и тем же.
Скажите, реально ли это сделать, и если да, то как. Заранее спасибо.
arbuzmaster
Т.е. Вы хотите тащить все записи из базы, конвертировать их *(убирать пробелы и дефисы), затем конвертировать запрос,а потом их сравнивать? Ведь есть например полнотекстовый поиск может,лучше воспользоваться им?

_____________
Мой первый сайтик

Посмотри на свой XBMC под другим углом
redreem
ну одно из возможный решений, конечно. но надо понимать, что это накладывает ограничение на формат названия. т.е.
1. наверняка оно будет состоять только из букв, цифр, минусов и пробелов.
2. названия не могут являться различными, только исходя из расположения минусов и пробелов. например: вдруг А1 и А-1 - это совершенно разные детали? хотя второй пункт в общем-то для поисковой выдачи не так критичен как первый.
sforce
Цитата
Т.е. Вы хотите тащить все записи из базы, конвертировать их *(убирать пробелы и дефисы), затем конвертировать запрос,а потом их сравнивать? Ведь есть например полнотекстовый поиск может,лучше воспользоваться им?

Я так понял, что для работоспособности запроса должен существовать индекс таблицы товаров с типом FULLTEXT, но таково нет, и доступа к изменению базы я не имею.

Цитата
ну одно из возможный решений, конечно. но надо понимать, что это накладывает ограничение на формат названия. т.е.
1. наверняка оно будет состоять только из букв, цифр, минусов и пробелов.

Почему же? Ну будут, допустим, скобки, они же никуда не денутся. Просто это проблема, что где-то указываю через дефис, а где-то через пробел очень распространена в названиях в моей тематике.

Цитата
2. названия не могут являться различными, только исходя из расположения минусов и пробелов. например: вдруг А1 и А-1 - это совершенно разные детали?

Это очень маловероятно.

В итоге, мне придется делать количество SQL-запросов равное кол-ву строк в базе? Это не слишком сильная нагрузка? Строк порядка 50000.
redreem
Цитата (sforce @ 26.06.2016 - 15:03)
В итоге, мне придется делать количество SQL-запросов равное кол-ву строк в базе?

откуда такой вывод?
inpost
sforce
Нарушаем нормальную форму, создаём ещё 1 поле, которое содержит эту же строку без лишних разделительных символов. Далее поиск делать по этому полю и получишь результат. Конечно если тут не стоит у тебя задача исправлять ошибки пользователя и находить "похожие" результаты.
А вот, к примеру, если хочешь поиск делать с ошибками, тебе подойдет своя голова или что-то вроде https://habrahabr.ru/company/sphinx/blog/61807/

_____________
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.