SQL Academy · Leçon

Recherche par trigrammes (pg_trgm) pour la correspondance approximative

Trouvez des chaînes similaires avec l’extension pg_trgm, des index de trigrammes GiST/GIN et similarity().

Leçon 1 sur 414 étapes

Recherche par trigrammes (pg_trgm) pour la correspondance approximative est une leçon SQL Academy gratuite sur CoddyKit. Ceci est la leçon 1 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage SQL Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours SQL Academy comprend 4 leçons au total.

Pourquoi les trigrammes ?

LIKE %word% ne peut pas utiliser un index en arbre B. Les trigrammes (« sous-chaînes de 3 caractères »), combinés à GIN/GiST, permettent d'effectuer rapidement des recherches approximatives et des recherches de sous-chaînes.

Activer l'extension

pg_trgm est fourni avec les extensions contrib de PostgreSQL :

CREATE EXTENSION IF NOT EXISTS pg_trgm;

Trigramme d'un mot

Affichez les trigrammes d'une chaîne :

SELECT show_trgm('database');
-- {dat, aba, atab, tab, abas, base, ase, ...}

Fonction de similarité

Nombre flottant dans [0..1] :

SELECT similarity('database', 'datbase');     -- ~0.75
SELECT similarity('hello', 'world');             -- ~0.0

L'opérateur %

Renvoie vrai si la similarité dépasse le seuil (0,3 par défaut) :

SELECT 'database' % 'datbase';      -- t
SET pg_trgm.similarity_threshold = 0.4;

Index pour la recherche de sous-chaînes

Un index trigramme GIN accélère LIKE '%word%' :

CREATE INDEX users_name_trgm ON users USING GIN (full_name gin_trgm_ops);

-- Now this is index-supported:
SELECT * FROM users WHERE full_name ILIKE '%ali%';

GiST ou GIN

  • GIN — lectures plus rapides, écritures plus lentes, index plus volumineux
  • GiST — écritures plus rapides, lectures plus lentes, index moins volumineux

La plupart des équipes choisissent GIN pour les recherches approximatives.

Requêtes de correspondance approximative

Trouvez des chaînes similaires même lorsqu'elles contiennent des fautes de frappe :

SELECT full_name, similarity(full_name, 'datbase') AS sim
FROM users
WHERE full_name % 'datbase'
ORDER BY sim DESC
LIMIT 10;

Distance pour le classement

L'opérateur <-> renvoie la distance (1 - similarité), ce qui vous permet d'utiliser ORDER BY distance ASC :

SELECT full_name
FROM users
WHERE full_name % 'alice'
ORDER BY full_name <-> 'alice'
LIMIT 10;

Saisie semi-automatique avec des trigrammes

Combinez pg_trgm avec un préfixe LIKE pour obtenir une saisie semi-automatique réactive :

SELECT name
FROM products
WHERE name % $1
   OR name ILIKE $1 || '%'
ORDER BY similarity(name, $1) DESC
LIMIT 8;

Limites des trigrammes

Les trigrammes fonctionnent sur l'alphabet utilisé en entrée. Les langues CJK nécessitent une segmentation différente. Pour effectuer une recherche complète en langage naturel, utilisez tsvector + GIN.

Combinaison avec d'autres index

Une requête comportant plusieurs filtres peut utiliser un index trigramme AND un index en arbre B via Bitmap And :

EXPLAIN ANALYZE
SELECT * FROM users
WHERE full_name ILIKE '%ali%' AND country = 'US';

Récapitulatif

pg_trgm résout le problème du « caractère générique initial ».

  • Index trigramme GIN → LIKE %x% rapide
  • Opérateur % et similarity() pour les correspondances approximatives
  • Distance <-> pour le classement
  • Idéal pour la saisie semi-automatique et les recherches tolérant les fautes de frappe

Vérification rapide

Pourquoi un index B-tree classique ne peut-il pas aider avec WHERE name LIKE '%alice%' ?

Gratuit pour commencer

Apprends SQL avec un tuteur IA — gratuit

Écris et exécute du vrai code dans ton navigateur, obtiens de l'aide instantanée d'un tuteur IA disponible 24h/24, et reprends là où tu t'es arrêté sur le web ou dans l'app.

Cours
46
Leçons
183

Questions Fréquemment Posées

La leçon « Recherche par trigrammes (pg_trgm) pour la correspondance approximative » est-elle gratuite ?

Oui — le texte complet de « Recherche par trigrammes (pg_trgm) pour la correspondance approximative » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours SQL Academy, passe à CoddyKit PRO. Le cours SQL Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Recherche par trigrammes (pg_trgm) pour la correspondance approximative » ?

Trouvez des chaînes similaires avec l’extension pg_trgm, des index de trigrammes GiST/GIN et similarity(). Tu pratiques SQL Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer SQL Academy ?

Aucune expérience préalable n'est requise. SQL Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 1 sur 4.

Combien de temps prend la leçon « Recherche par trigrammes (pg_trgm) pour la correspondance approximative » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon SQL Academy ?

Oui. Chaque leçon SQL Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Recherche par trigrammes (pg_trgm) pour la correspondance approximative
  2. Recherche en texte intégral avec tsvector et GIN
  3. Indexation géospatiale avec PostGIS
  4. Recherche vectorielle avec pgvector
← Retour à SQL Academy