14.01.2026

pg_textsearch для PostgreSQL - BM25 полнотекстовый поиск и релевантное ранжирование

pg_textsearch — это открытое расширение для PostgreSQL, реализующее полнотекстовый поиск с релевантным ранжированием результатов на основе алгоритма BM25 (Best Matching 25). Он является индустриальным стандартом для оценки качества совпадения текста и применяется во многих поисковых системах благодаря способности учитывать частоту термина, редкость слова в корпусе и длину документа. pg_textsearch делает PostgreSQL не просто СУБД, а полноценной поисковой платформой без необходимости использовать внешние поисковые движки вроде Elasticsearch или Algolia.

Исходный код проекта и документация доступны на GitHub:

https://github.com/timescale/pg_textsearch

Практическое применение

Расширение pg_textsearch особенно полезно, когда нужно:

Типичные сценарии: поиск по каталогам товаров, документации, блогам, чат-ботам, системам рекомендаций и информационным панелям.

Как установить pg_textsearch

1. Требования

PostgreSQL v17 или v18 (расширение поддерживает эти версии).

2. Установка расширения

Если у вас уже есть PostgreSQL с поддержкой сборки расширений:

CREATE EXTENSION pg_textsearch;

3. Создание BM25-индекса

Пример таблицы:

CREATE TABLE documents (
id BIGSERIAL PRIMARY KEY,
content TEXT
);

INSERT INTO documents (content) VALUES
('PostgreSQL is a powerful database system'),
('BM25 is an effective ranking function'),
('Full-text search with custom scoring');

Создание BM25-индекса:

CREATE INDEX docs_bm25_idx
ON documents
USING bm25(content)
WITH (text_config = 'english');

4. Выполнение поиска

SELECT *
FROM documents
ORDER BY content <@> 'database system'
LIMIT 10;

Оператор <@> возвращает BM25-оценку (в PostgreSQL сортировка по возрастанию означает более релевантные документы имеют более низкие значения).

Часто задаваемые вопросы (FAQ)

Вывод

pg_textsearch — мощное расширение для PostgreSQL, которое приносит современный BM25-ранжированный полнотекстовый поиск прямо в реляционную базу данных. Он позволяет упростить архитектуру приложений, улучшить качество поиска и сократить зависимость от внешних поисковых систем. Это особенно актуально для стартапов, MVP-продуктов и гибридных AI-приложений, где важно иметь единый стек данных и поиска.

Если вам нужно быстро добавить релевантный поиск без лишних сервисов — pg_textsearch идет в ногу с современными требованиями разработчиков и архитекторов баз данных.