Ils servent des objectifs très différents.
- La recherche de texte intégral est utilisée pour renvoyer les documents qui correspondent à une requête de recherche de mots radicaux.
- Les trigrammes vous donnent une méthode pour comparer deux chaînes et déterminer à quel point elles se ressemblent.
Prenons les exemples suivants :
SELECT 'cat' % 'cats'; --true
Ce qui précède renvoie true car 'cat' est assez similaire à 'cats' (tel que dicté par la limite pg_trgm).
SELECT 'there is a cat with a dog' % 'cats'; --false
Ce qui précède renvoie false parce que % recherche une similarité entre les deux chaînes entières, sans rechercher le mot cats dans la chaîne.
SELECT to_tsvector('there is a cat with a dog') @@ to_tsquery('cats'); --true
Cela renvoie true parce que tsvector a transformé la chaîne en une liste de mots à racine et a ignoré un tas de mots courants (mots vides - comme 'est' &'a') ... puis a recherché la version à racine de cats .
Il semble que vous souhaitiez utiliser des trigrammes pour la correction automatique votre ts_query mais ce n'est pas vraiment possible (pas de manière efficace de toute façon). Ils ne savent pas vraiment savoir un mot est mal orthographié, à quel point il pourrait être similaire à un autre mot. Ils pourraient être utilisé pour rechercher une table de mots pour essayer de trouver des mots similaires, vous permettant d'implémenter une fonctionnalité de type "Voulez-vous dire...", mais ce mot nécessite de maintenir une table séparée contenant tous les mots utilisés dans votre recherche search champ.
Si vous avez des mots/phrases souvent mal orthographiés auxquels vous souhaitez que l'index de texte corresponde, vous pouvez consulter les dictionnaires de synonymes