[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Морфологический поиск по БД
Kiarra
Доброго времени суток! Такой вопрос: как целесообразнее сделать морфологический поиск по БД (пока что знаю про три варианта - SPHINX, словари и просто обрезать окончания поискового запроса до корней слов).

Речь идет не о пользовательском поиске на сайте, а об обычном разовом запросе к БД скрипта...

Нужно, чтобы при запросе "бублик" искалось и "бублика", "бублику", "бублике"...SPHINX, я так понимаю, слишком круто для такого, с обрезанием окончаний все понятно, а вот со словарями - не очень.

Если кто делал такое, поделитесь опытом? как их использовать в коде и какие лучше?
T1grOK
PHPMorphy?

_____________
Mysql, Postgresql, Redis, Memcached, Unit Testing, CI, Kohana, Yii, Phalcon, Zend Framework, Joomla, Open Cart, Ymaps, VK Api
Kiarra
Спасибо, посмотрела PHPMorphy...Все вроде работает, ищет базовую форму слова, но не знаю, как решить новую проблему: для фразы "зеленые бублики" базовые словоформы будут "зеленый бублик", а для "зеленые платья" - "зеленое платье", т.е. слово "зеленый" в половине случаев будет конвертироваться неверно и весь запрос окажется бессмысленным, ничего не найдется....Единственный выход - обрезать тем же Morphy до корня слов?
waldicom
Или брать слова по отдельности...

_____________
Свои мозги еще никто не отменял.
Телепатов нету.
Kiarra
в прогоне по морфи они и так разбиваются на слова, иначе изменяется форма только последнего слова во фразе, но после прогона на выходе поисковая фраза будет выглядеть как "зеленый платье" или "зеленая бублик" sad.gif
waldicom
ок... Но поисковую фразу не обязательно брать с морфи... Или?
Что клиент ввел, то ему и покащывать опять

_____________
Свои мозги еще никто не отменял.
Телепатов нету.
Kiarra
я не совсем поиск пытаюсь сделать, просто надо, чтобы по фразе "зеленые бублики" искалась в БД фраза "зеленый бублик", в базе данных у меня все в единственном числе и в исходной форме, поэтому, и ключевое слово нужно привести в такую же форму, иначе не ищется ничего (поиск по БД далее делаю sql запросом с MATCH - AGAINST).

Пробовала делать в два этапа:
1) - ищется по "идеальным" ключевым словам, которые уже в нужной форме (все отлично ищется, сортируется по релевантности)
2) - оставшиеся ключи обрезаются по прописанным окончаниям (уже довольно грубый поиск, например, по запросу "зелен* бубл*" найдется "черно-оранжевый бублик", но все же так в моей ситуации лучше, чем совсем ничего.

Но хочется сделать все правильнее и чтобы результаты запроса релевантнее были, поэтому, села смотреть PHPMorphy...а так такой затык )
linker
Ну можно примерно так:
$word = preg_replace('/[аеёийоуыъьэюя]+$/iu', $word);
mysql_query('SELECT *FROM `table` WHERE `word` LIKE "' . $word . '%"');


_____________
Gear Framework
Gear Framework на Github
Guest
Помогите, кто-нибудь сделать Библию с морфологическим поиском, ради Бога, пожалуйста! huh.gif
Быстрый ответ:

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