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

TO_TSQUERY

Складає запит для повнотекстового пошуку: слова з умовами «і», «або», «не».

Синтаксис

TO_TSQUERY('<мовна конфігурація>', '<запит>')
WEBSEARCH_TO_TSQUERY('<мовна конфігурація>', <текст як у пошуковику>)

У запиті слова з'єднують операторами: & — «і», | — «або», ! — «не», <-> — «одне одразу за іншим». Слова зводяться до основи так само, як у TO_TSVECTOR. WEBSEARCH_TO_TSQUERY приймає звичний текст із пошукового рядка — слова, лапки й мінус — і сама перетворює його на запит.

Запит з «і»
SELECT TO_TSQUERY('english', 'running & foxes') AS query;
query
'run' & 'fox'
«І» та «не» в пошуку
SELECT TO_TSVECTOR('english', 'Fast delivery and friendly support')
@@ TO_TSQUERY('english', 'delivery & !slow') AS match;
match
true

Є delivery і нема slow — отже, збіг.

Як у пошуковику
SELECT WEBSEARCH_TO_TSQUERY('english', 'fast delivery -slow') AS query;
query
'fast' & 'deliveri' & !'slow'

Мінус перед словом став «не», пробіл — «і». А deliveri — це основа слова delivery.

Зверни увагу

Пробіл між словами — помилка: TO_TSQUERY('english', 'fast delivery') скаже syntax error in tsquery. Слова з'єднуй & або бери WEBSEARCH_TO_TSQUERY.

Текст від користувача в TO_TSQUERY не передавай: будь-який зайвий символ зламає запит. Для пошукового рядка є WEBSEARCH_TO_TSQUERY чи PLAINTO_TSQUERY.

Конфігурація запиту й документа має збігатися: TO_TSVECTOR('english', 'running') @@ TO_TSQUERY('simple', 'running') дає false, бо в документі основа run, а в запиті — ціле running.

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

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