Автор описывает оптимизацию полнотекстового поиска в PostgreSQL для заголовков блог-постов. Изначально использовался динамический `to_tsvector`, что приводило к замедлению. Для улучшения производительности была добавлена колонка `search_vector` для хранения предварительно обработанных векторов tsv и проиндексирована с помощью GIN. Это значительно ускорило поиск с помощью `to_tsquery`. Функция `ts_rank` PostgreSQL обеспечивает ранжирование результатов, но не имеет ранжирования на основе позиции. Функция `POSITION` была использована для определения позиции термина поиска в заголовке. Был создан пользовательский ранжирование, сочетающий `ts_rank` и обратную позицию для лучшего ранжирования релевантности. Небольшая коррекция избегает деления на ноль. Окончательный запрос упорядочивает результаты по этому комбинированному ранжированию. Решение работает хорошо для поиска по одному термину. Однако поиск по нескольким терминам требует тщательного рассмотрения из-за ограничений `POSITION` по сравнению с гибкостью `to_tsquery`. Автор предоставляет ссылки на соответствующую документацию PostgreSQL.
dev.to
PostgreSQL Full Text Search Rank by Position
