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