Доброго времени суток! Такой вопрос: как целесообразнее сделать морфологический поиск по БД (пока что знаю про три варианта - SPHINX, словари и просто обрезать окончания поискового запроса до корней слов).
Речь идет не о пользовательском поиске на сайте, а об обычном разовом запросе к БД скрипта...
Нужно, чтобы при запросе "бублик" искалось и "бублика", "бублику", "бублике"...SPHINX, я так понимаю, слишком круто для такого, с обрезанием окончаний все понятно, а вот со словарями - не очень.
Если кто делал такое, поделитесь опытом? как их использовать в коде и какие лучше?
PHPMorphy?
_____________
Mysql, Postgresql, Redis, Memcached, Unit Testing, CI, Kohana, Yii, Phalcon, Zend Framework, Joomla, Open Cart, Ymaps, VK Api
Спасибо, посмотрела PHPMorphy...Все вроде работает, ищет базовую форму слова, но не знаю, как решить новую проблему: для фразы "зеленые бублики" базовые словоформы будут "зеленый бублик", а для "зеленые платья" - "зеленое платье", т.е. слово "зеленый" в половине случаев будет конвертироваться неверно и весь запрос окажется бессмысленным, ничего не найдется....Единственный выход - обрезать тем же Morphy до корня слов?
waldicom
6.03.2014 - 18:25
Или брать слова по отдельности...
_____________
Свои мозги еще никто не отменял.
Телепатов нету.
в прогоне по морфи они и так разбиваются на слова, иначе изменяется форма только последнего слова во фразе, но после прогона на выходе поисковая фраза будет выглядеть как "зеленый платье" или "зеленая бублик"
waldicom
6.03.2014 - 18:54
ок... Но поисковую фразу не обязательно брать с морфи... Или?
Что клиент ввел, то ему и покащывать опять
_____________
Свои мозги еще никто не отменял.
Телепатов нету.
я не совсем поиск пытаюсь сделать, просто надо, чтобы по фразе "зеленые бублики" искалась в БД фраза "зеленый бублик", в базе данных у меня все в единственном числе и в исходной форме, поэтому, и ключевое слово нужно привести в такую же форму, иначе не ищется ничего (поиск по БД далее делаю sql запросом с MATCH - AGAINST).
Пробовала делать в два этапа:
1) - ищется по "идеальным" ключевым словам, которые уже в нужной форме (все отлично ищется, сортируется по релевантности)
2) - оставшиеся ключи обрезаются по прописанным окончаниям (уже довольно грубый поиск, например, по запросу "зелен* бубл*" найдется "черно-оранжевый бублик", но все же так в моей ситуации лучше, чем совсем ничего.
Но хочется сделать все правильнее и чтобы результаты запроса релевантнее были, поэтому, села смотреть PHPMorphy...а так такой затык )
Ну можно примерно так:
$word = preg_replace('/[аеёийоуыъьэюя]+$/iu', $word);
mysql_query('SELECT *FROM `table` WHERE `word` LIKE "' . $word . '%"');
_____________
Gear FrameworkGear Framework на Github
Помогите, кто-нибудь сделать Библию с морфологическим поиском, ради Бога, пожалуйста!
Быстрый ответ:
Powered by dgreen
Здесь расположена полная версия этой страницы.