De tjener meget forskellige formål.
- Fuld tekstsøgning bruges til at returnere dokumenter, der matcher en søgeforespørgsel med stammeord.
- Trigrammer giver dig en metode til at sammenligne to strenge og bestemme, hvor ens de ser ud.
Overvej følgende eksempler:
SELECT 'cat' % 'cats'; --true
Ovenstående returnerer sand, fordi 'cat'
er ret lig 'cats'
(som dikteret af pg_trgm-grænsen).
SELECT 'there is a cat with a dog' % 'cats'; --false
Ovenstående returnerer false
fordi %
leder efter på samme måde mellem de to hele strenge, og leder ikke efter ordet cats
indenfor strengen.
SELECT to_tsvector('there is a cat with a dog') @@ to_tsquery('cats'); --true
Dette returnerer true
fordi tsvector omdannede strengen til en liste med opstammede ord og ignorerede en masse almindelige ord (stopord - som 'er' &'a')... søgte derefter efter den stammede version af cats
.
Det lyder som om du vil bruge trigrammer til at autokorrigere din ts_query
men det er ikke rigtig muligt (ikke på nogen effektiv måde alligevel). De ved ikke rigtigt et ord er stavet forkert, hvor ligner det bare et andet ord. De kunne bruges til at søge i en tabel med ord for at prøve at finde lignende ord, hvilket giver dig mulighed for at implementere en "menede du..."-typefunktion, men dette ord kræver, at du vedligeholder en separat tabel, der indeholder alle de ord, der bruges i din search
felt.
Hvis du har nogle almindeligt stavede ord/sætninger, som du vil have tekstindekset til at matche, kan du eventuelt se på Synonym Dictionaries