подскажите, как реализовать поиск в Mysql

ShureG

Новичок
Ситуация такая...
Есть база в которой содержится некий текст, допустим есть поле содержащее предложение: Шла Саша по шоссе
и мне ее нужно найти, вписав в запрос слово Саша, без проблем находится через LIKE, но вписав в запрос Саша шоссе - mysql через like уже не найдет такую запись,

Собственно, как мне лучше сделать запрос чтобы mysql искал по каждому слово, что то вроде IN('саша', 'шоссе'), в общем чтобы я в запрос вписал через запятую нужные мне слова и если любое из них подошло то выбирать и идти дальше пока все записи не буду завершены ну или пока не упрется в LIMIT N,N
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
http://sphinxsearch.com/ и забыть про извращения. Это если из пушки по воробушкам, а если вам надо ехать прям сразу - полнотекстовый поиск, к примеру как-то так:
Код:
SELECT * FROM `test` WHERE MATCH(test) AGAINST('саша шоссе')
 

Redjik

Джедай-мастер
С 5.6 мускул умеет полнотекстовый поиск, смотри пример by c0dex
 

ShureG

Новичок
http://sphinxsearch.com/ и забыть про извращения. Это если из пушки по воробушкам, а если вам надо ехать прям сразу - полнотекстовый поиск, к примеру как-то так:
Код:
SELECT * FROM `test` WHERE MATCH(test) AGAINST('саша шоссе')
Спасибо! то, что нада
но появилась новая проблемка :(

Если сделать запрос части слова, например: AGAINST('аша') или AGAINST('оссе') - тогда не находит :(, а через LIKE Бы нашло, конечно жить можно, но тем не менее есть варианты, как это исправить?
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Я ощущал этот вопрос...

Смотрим в сторону:
Код:
SHOW VARIABLES LIKE '%ft_min_word_len%'
Запрос выведет циферку - она есть наименьшее, что попадает в fulltext index в мускуле.
https://dev.mysql.com/doc/refman/5.0/en/server-system-variables.html#sysvar_ft_min_word_len

В соответствии с этим ты можешь искать <от> этой величины (длины строки) и далее используя конструкцию с маской <*> в BOOLEAN режиме

Код:
SELECT * FROM `test` WHERE MATCH(test) AGAINST('*шосс*' INBOOLEAN MODE)
 
Сверху