tg-me.com/eshu_coding/211
Last Update:
Палантир. Часть 10. Полнотекстовый поиск.
#палантир@eshu_coding
В прошлом посте я демонстрировал, как работает полнотекстовый поиск в постгресе в зависимости от используемого словаря.
Словари имеют некоторые особенности. Дефолтный коряво отрезает окончания, не умеет в синонимы.
Тот, который я компилировал из исходников очень неплохо справляется с падежами и склонениями. Но при этом он бьёт имена собственные: человека по фамилии Медведев он превратит в медведя.
К тому же у него есть особенность: при попадании на разбор "слова" из 80 и более символов (что-то типа ахахахаха....) он пытается съесть 10^19 бит памяти, которых на сервере естественно нет. Ещё этот словарь крашит постгрес при попадании какого-нибудь экзотического символа, например иероглифа.
Проблемы больших слов и иероглифов я решил тупо регулярным выражением, которое вырезает некондицию из текста.
В итоге я не смог выбрать, что мне больше нравится - качественный поиск по обычным словам или возможность искать имена собственные - и оставил векторизироваться и индексироваться оба словаря.
Со временем надо будет дорабатывать словарь, расширяя функционал работы с падежами и склонениями на имена собственные.
Вообще, готовое решение для полностекстового поиска на русском языке есть встроенное в Postgres Pro, но он платный, лицензия около 200к рублей.
Впрочем, Yandex.Cloud предоставляет Postgrespro как сервис, примерно за 10 тыс рублей в месяц, потому лицензию покупать не обязательно, можно арендовать пробный сервер и поиграться с ним.
BY Эшу быдлокодит

Share with your friend now:
tg-me.com/eshu_coding/211