Поиск в MySQL

vmnetwork

Новичок
Поиск в MySQL

Возник вопрос над реализацией поиска... сейчас использую простой поиск

PHP:
$q="SELECT * FROM cat2_firm WHERE fname LIKE '%".$search."%' OR fopisanie LIKE '%".$search."%' OR fboss LIKE '%".$search."%'";
Но главный минус если я набираю "Шкафы-купе" то как правило только это и нахожу, хотелосьбы также чтобы отображаль и "Шкаф-купе" и "купе Шкафы" и прочее связанное со шкафами... ну это конечно пример...

еще один пример 280XL, 280 XL, 280-XL, XL 280 кпримеру ввожу "280XL" а "280 XL" уже не находит

на многих сайтах поиск работает по другому.. находит все похожее, хотелось бы узнать как правильно реализоввывать поиск?
 

Ragazzo

TDD interested
Отдельную таблицу заведи, где будут храниться теги и id нужных статей, это вообще самый простой вариант...
 

vmnetwork

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

newARTix

Новичок
vmnetwork
ну и как работает поиск на многих сайтах? сформулируй сам себе задачу и реши ее.
А вообще, проще всего поставить поиск от Гугла. А если нужен свой поиск учитывающий морфологию, то Sphinx.
 

vmnetwork

Новичок
newARTix
Я описал как он работает... и помоему понятно что хотел... к примеру поиск хорошо работает на www.tiu.ru, от гугла ставить поиск на сайт который является справочным по фирмам и ценам - первый раз такое слышу...

Sphinx - я так понял это поисковый двиг? надо подробнее почитать...
 

iceman

говнокодер
vmnetwork
название товара или еще чего нибудь разбивай на слова и суй в отдельную таблицу. кто тебя заставляет ручками вписывать?
 

newARTix

Новичок
vmnetwork
а чем "сайт который является справочным по фирмам и ценам" отличается от миллионов других сайтов на которых стоит поиск от Гугла? ;)

Понятно, чтобы ты хотел чтобы поиск работал, а вот какие именно ты предъявляешь к нему требования - тебе самому не очень понятно. Об этом я и говорю.

Просто MySQL из коробки не способен реализовать то что тебе нужно, поэтому не смотря на всю тривиальность, эту задачу все решают по своему, и у многих стоят разные приоритеты к надежности/скорости/предсказуемости/гибкости. От поиска всем нужно, что-то своё.

Пример про "280" очень легко и эффективно решается путем который указал iceman. Разбиваешь регуляркой название товара на отдельные слова (граница букв-цифр это тоже граница слов), делаешь индексную таблицу с словами и айдишниками товаров, ищещь по ней.
Но пример про "шкаф" говорит о требовании поддержки движком морфологии. Эта задача уже другого уровня. Ее решает Sphinx.
Хотя опять же, ее можно решить менее надежно, но более просто. Можно найти класс на PHP, который будет обрезать окончания слов, и тогда даже просто с индексной таблицей будет находиться практически все что нужно, без громоздких движков.
 

vmnetwork

Новичок
Возник вопрос - для установки sphinx на хостинг (Unix) требуется только редактирование конфинг файла? (первый раз просто сталкиваюсь с такими системами)
 

fixxxer

К.О.
Партнер клуба
Для установки sphinx требуется, для начала, установка sphinx. :)

А так да, по большому счету кроме sphinx.conf и настройки запуска индексера ничего такого не надо.
 

korpus

злой бобёр
Автор оригинала: newARTix
vmnetwork
А вообще, проще всего поставить поиск от Гугла. А если нужен свой поиск учитывающий морфологию, то Sphinx.
Насколько мне известно, не всегда все страницы содержатся в базе гугла. Некоторые просто не успевают или просто не индексируются по каким-то причинам(есть же такие случаи). Поэтому, поиск Google не такой эффективный способ.
 

newARTix

Новичок
korpus
если только они закрыты регистрацией... хотя и там есть способы ;) А если они "не успевают", то это повод задуматься над поисковой оптимизацией, SEO и sitemap.
Впрочем, Гугл я привел просто как одно из решений, оно не самое лучшее - согласен.
 
Сверху