Те служат за много различни цели.
- Пълнотекстово търсене се използва за връщане на документи, които съответстват на заявка за търсене на основни думи.
- Триграмите ви дават метод за сравняване на два низа и определяне колко сходни изглеждат.
Помислете за следните примери:
SELECT 'cat' % 'cats'; --true
Горното връща истина, защото 'cat'
е доста подобен на 'cats'
(както е продиктувано от ограничението pg_trgm).
SELECT 'there is a cat with a dog' % 'cats'; --false
Горното връща false
защото %
търси подобно между двата цели низа, а не търси думата cats
в рамките на низа.
SELECT to_tsvector('there is a cat with a dog') @@ to_tsquery('cats'); --true
Това връща true
тъй като tsvector трансформира низа в списък с основополагащи думи и игнорира куп често срещани думи (стоп думи - като 'is' &'a')... след това потърси версията на cats
.
Изглежда, че искате да използвате триграми за автоматична корекция вашата ts_query
но това всъщност не е възможно (все пак не по никакъв ефективен начин). Те наистина не знаят една дума е написана неправилно, колко подобна може да е на друга дума. Те могат да се използва за търсене в таблица с думи, за да се опитате да намерите подобни думи, което ви позволява да внедрите функция за тип „имахте ли предвид...“, но тази дума изисква поддържане на отделна таблица, съдържаща всички думи, използвани във вашето search
поле.
Ако имате някои често неправилно изписвани думи/фрази, с които искате текстовият индекс да съвпада, може да искате да разгледате Синонимните речници