0Pricing
SQL Academy · Lezione

Ricerca per trigrammi (pg_trgm) per il fuzzy matching

Trovi stringhe simili con l’estensione pg_trgm, indici GiST/GIN per trigrammi e similarity().

Ricerca per trigrammi (pg_trgm) per il fuzzy matching è una lezione SQL Academy gratuita su CoddyKit. Questa è la lezione 1 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento SQL Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso SQL Academy include 4 lezioni in totale.

Perché i trigrammi?

LIKE %word% non può utilizzare un indice B-tree. I trigrammi («sottostringhe di 3 caratteri»), combinati con GIN/GiST, consentono ricerche rapide fuzzy e per sottostringhe.

Abilitare l'estensione

pg_trgm è incluso in PostgreSQL contrib:

CREATE EXTENSION IF NOT EXISTS pg_trgm;

Il trigramma di una parola

Mostri i trigrammi di una stringa:

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

Funzione di similarità

Valore decimale nell'intervallo [0..1]:

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

L'operatore %

Restituisce true se la similarità supera la soglia (0.3 per impostazione predefinita):

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

Indice per la ricerca di sottostringhe

L'indice trigramma GIN rende veloce 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 e GIN a confronto

  • GIN — letture più veloci, scritture più lente, indice più grande
  • GiST — scritture più veloci, letture più lente, indice più piccolo

La maggior parte dei team sceglie GIN per la ricerca fuzzy.

Query per la corrispondenza fuzzy

Trovi stringhe simili anche in presenza di errori di battitura:

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

Distanza per l'ordinamento

L'operatore <-> restituisce la distanza (1 - similarità), quindi può utilizzare ORDER BY distance ASC:

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

Completamento automatico con i trigrammi

Combini pg_trgm con LIKE e un prefisso per ottenere un completamento automatico reattivo:

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

Limiti dei trigrammi

I trigrammi funzionano sull'alfabeto dell'input. Le lingue CJK richiedono una tokenizzazione diversa. Per la ricerca completa in linguaggio naturale, utilizzi tsvector + GIN.

Combinazione con altri indici

Una query con più filtri può utilizzare un indice trigramma e un B-tree tramite Bitmap And:

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

Riepilogo

pg_trgm risolve il problema del «carattere jolly iniziale».

  • Indice trigramma GIN → LIKE %x% veloce
  • Operatore % e similarity() per la corrispondenza fuzzy
  • Distanza <-> per l'ordinamento
  • Ideale per il completamento automatico e la ricerca tollerante agli errori di battitura

Verifica rapida

Perché un normale indice B-tree non può aiutare con WHERE name LIKE '%alice%'?

Domande Frequenti

La lezione «Ricerca per trigrammi (pg_trgm) per il fuzzy matching» è gratuita?

Sì — il testo completo di «Ricerca per trigrammi (pg_trgm) per il fuzzy matching» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso SQL Academy, passa a CoddyKit PRO. Il corso SQL Academy include 4 lezioni in totale.

Cosa imparerò in «Ricerca per trigrammi (pg_trgm) per il fuzzy matching»?

Trovi stringhe simili con l’estensione pg_trgm, indici GiST/GIN per trigrammi e similarity(). Eserciti SQL Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare SQL Academy?

Non è richiesta alcuna esperienza precedente. SQL Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 1 di 4.

Quanto tempo richiede la lezione «Ricerca per trigrammi (pg_trgm) per il fuzzy matching»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione SQL Academy?

Sì. Ogni lezione SQL Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Ricerca per trigrammi (pg_trgm) per il fuzzy matching
  2. Ricerca full-text con tsvector e GIN
  3. Indicizzazione geospaziale con PostGIS
  4. Ricerca vettoriale con pgvector
← Torna a SQL Academy