Повнотекстовий пошуклише PostgreSQL

TO_TSVECTOR

Готує текст до повнотекстового пошуку: розбиває на слова й зводить їх до основи.

Синтаксис

TO_TSVECTOR('<мовна конфігурація>', <текст>)
<tsvector> @@ <tsquery>

Перетворює текст на tsvector — набір основ слів із їхніми позиціями. Мовна конфігурація, як-от 'english', відкидає службові слова (the, are) і зводить форми слова до основи: foxes стає fox, running — run. Шукають у ньому оператором @@ разом із TO_TSQUERY. Вбудованої конфігурації для української нема — тоді беруть 'simple' або розширення.

Текст — у набір основ
SELECT TO_TSVECTOR('english', 'The quick brown foxes are running') AS document;
document
'brown':3 'fox':4 'quick':2 'run':6

Цифри — позиції слів у тексті. Службові The і are зникли.

Пошук збігу
SELECT TO_TSVECTOR('english', 'The foxes are running') @@ TO_TSQUERY('english', 'run') AS found;
found
true

Слова run у тексті нема, але running зводиться до тієї самої основи.

Конфігурація simple — без основ
SELECT TO_TSVECTOR('simple', 'The foxes are running') AS simple_config;
simple_config
'are':3 'foxes':2 'running':4 'the':1

'simple' лише переводить у нижній регістр: жодне слово не відкинуто й не скорочено.

Зверни увагу

Без мовної конфігурації береться налаштування сервера, і результат на різних серверах може відрізнятися. Завжди вказуй мову явно.

Службові слова зникають зовсім: у 'english' пошук за the не знайде нічого навіть там, де це слово є.

Рахувати TO_TSVECTOR на льоту по великій таблиці повільно. Для швидкого пошуку готовий tsvector зберігають у стовпці й будують на ньому індекс GIN.

Схожі функції

Детально в курсі