Обновить

Комментарии 7

НЛО прилетело и опубликовало эту надпись здесь

Спасибо за тёплые слова и советы!!

По поиску - идея с двухэтапным подходом (ILIKE -> GIN fallback) интересная, и я думал об этом. Реализовал немного иначе: через word_similarity с динамическим порогом — для коротких запросов порог выше (меньше ложных совпадений), для длинных — мягче. Но ваш вариант "сначала точный, потом нечёткий" элегантнее по логике — добавлю в TODO.

По Flutter - у меня уже есть нативное Android-приложение на Kotlin/Compose. Flutter или React Native рассматривал, но остановился на нативе из-за опыта. Хотя для охвата iOS - аргумент весомый, особенно учитывая что арабский и английский уже есть

Попробовал реализовать ваш совет прямо сейчас. Результат - пушка! 🚀 Раньше поиск по слову "рамадан" занимал около 300мс, теперь по логам стабильно 113мс. Огромное спасибо за наводку, это реально упростило логику и ускорило ответ API!

НЛО прилетело и опубликовало эту надпись здесь

Хороший вопрос про арабский! Я как раз замерил после вашего вопроса: поиск «إن شاء الله» без харакатов(огласовок) занимает около 1.7 сек, в то время как запрос с огласовками отрабатывает за 160-170 мс.

Проблема в том, что Postgres (pg_trgm) тратит колоссальные ресурсы на поиск соответствий, когда в индексированном тексте полно диакритики, а в запросе её нет - триграммы просто не матчатся напрямую. Решение уже в ToDo: добавим в базу отдельную колонку с нормализованным текстом (без харакатов) специально для поиска.

А для всех запросов, у нас уже работает кеширование в Redis на 24 часа, так что после первого "прогрева" они отдаются мгновенно

крутой проект!
Один совет: посмотри в сторону Meilisearch вместо pg_trgm. У тебя 15к записей и уже 2 ГБ на индексах, а поиск все равно больше секунды. Meilisearch из коробки дает fuzzy search за миллисекунды и с арабским работает нормально.

спасибо за наводку! Про Meilisearch слышал, но пока руки не доходили, и думал сложно настроить. Обязательно посмотрю в сторону нормального поискового движка, тем более если там из коробки арабский и такая скорость и добавлю в ToDo

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации