PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Recherche en texte intégral PostgreSQL et confusion des trigrammes

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