У Postgres давно есть full-text search, но честно - качество ранжирования часто “так себе”.
Если нужен реально удобный поиск по релевантности, обычно приходилось:
- поднимать Elasticsearch
- или подключать Algolia
- и потом вечно мучаться с синхронизацией данных между системами
Проблема не в том, что Postgres не умеет искать текст.
Проблема в том, что стандартный
ts_rank даёт довольно базовое ранжирование и сильно уступает современным поисковикам.Теперь появилась альтернатива.
Команда TigerDatabase выложила в open-source расширение pg_textsearch - оно приносит BM25 ранжирование прямо в Postgres.
Почему BM25 важно:
BM25 - это алгоритм, который лежит в основе Elasticsearch/Lucene и большинства “нормальных” поисковых движков.
То есть это уже проверенный стандарт качества поиска.
Что даёт pg_textsearch:
- BM25 ранжирование с настройками параметров
- очень простой синтаксис:
ORDER BY content <@> 'search terms'- работает с multi-language конфигами Postgres
- хорошо сочетается с
pgvector для hybrid search (keyword + embeddings)Для RAG это прям полезно:
можно делать гибридное извлечение в одной базе (Postgres),
без внешнего Elasticsearch и без лишнего glue-кода.
И всё это - open-source под лицензией PostgreSQL.
https://github.com/timescale/pg_textsearch