Trigram-zoeken (pg_trgm) voor fuzzy matching
Vind vergelijkbare tekenreeksen met de pg_trgm-extensie, GiST/GIN-trigramindexen en similarity().
Trigram-zoeken (pg_trgm) voor fuzzy matching is een gratis SQL Academy-les op CoddyKit. Dit is les 1 van 4. Je kunt de volledige les hieronder gratis lezen en daarna in de browser praktisch oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject SQL Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus SQL Academy bevat in totaal 4 lessen.
Waarom trigrammen?
LIKE %word% kan geen B-tree-index gebruiken. Trigrammen ("subtekenreeksen van 3 tekens") in combinatie met GIN/GiST bieden snel zoeken naar vage overeenkomsten en subtekenreeksen.
De extensie inschakelen
pg_trgm wordt meegeleverd met PostgreSQL contrib:
CREATE EXTENSION IF NOT EXISTS pg_trgm;Trigram van een woord
Toon de trigrammen van een tekenreeks:
SELECT show_trgm('database');
-- {dat, aba, atab, tab, abas, base, ase, ...}Similariteitsfunctie
Kommagetal in [0..1]:
SELECT similarity('database', 'datbase'); -- ~0.75
SELECT similarity('hello', 'world'); -- ~0.0De operator %
Geeft waar terug als de similariteit boven de drempelwaarde ligt (standaard 0.3):
SELECT 'database' % 'datbase'; -- t
SET pg_trgm.similarity_threshold = 0.4;Index voor zoeken naar subtekenreeksen
Een GIN-trigramindex maakt LIKE '%word%' snel:
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 versus GIN
- GIN — sneller lezen, trager schrijven, grotere index
- GiST — sneller schrijven, trager lezen, kleinere index
De meeste teams kiezen GIN voor zoeken naar vage overeenkomsten.
Query's voor vage overeenkomsten
Vind vergelijkbare tekenreeksen, zelfs met typefouten:
SELECT full_name, similarity(full_name, 'datbase') AS sim
FROM users
WHERE full_name % 'datbase'
ORDER BY sim DESC
LIMIT 10;Afstand voor rangschikking
De operator <-> geeft de afstand terug (1 - similariteit), zodat je kunt sorteren met ORDER BY distance ASC:
SELECT full_name
FROM users
WHERE full_name % 'alice'
ORDER BY full_name <-> 'alice'
LIMIT 10;Automatisch aanvullen met trigrammen
Combineer pg_trgm met LIKE voor een snel reagerende automatische aanvulling:
SELECT name
FROM products
WHERE name % $1
OR name ILIKE $1 || '%'
ORDER BY similarity(name, $1) DESC
LIMIT 8;Beperkingen van trigrammen
Trigrammen werken op het alfabet van de invoer. CJK-talen hebben een andere tokenisatie nodig. Gebruik voor volledig zoeken in natuurlijke taal tsvector plus GIN.
Combineren met andere indexen
Een query met meerdere filters kan een trigramindex EN een B-tree gebruiken via Bitmap And:
EXPLAIN ANALYZE
SELECT * FROM users
WHERE full_name ILIKE '%ali%' AND country = 'US';Samenvatting
pg_trgm lost het probleem van een "jokerteken aan het begin" op.
- GIN-trigramindex → snelle LIKE %x%
- De operator % en similarity() voor vage overeenkomsten
- <->-afstand voor rangschikking
- Uitstekend voor automatische aanvulling en zoeken waarbij typefouten zijn toegestaan
Snelle controle
Waarom kan een gewone B-tree-index niet helpen bij WHERE name LIKE '%alice%'?
Leer SQL met een AI-tutor — gratis
Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.
- Cursussen
- 46
- Lessen
- 183
Veelgestelde vragen
Is de les “Trigram-zoeken (pg_trgm) voor fuzzy matching” gratis?
Ja — de volledige tekst van “Trigram-zoeken (pg_trgm) voor fuzzy matching” kun je hier gratis op het web lezen. Als je interactief wilt oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is, en de rest van de cursus SQL Academy wilt ontgrendelen, kun je upgraden naar CoddyKit PRO. De cursus SQL Academy bevat in totaal 4 lessen.
Wat leer ik in “Trigram-zoeken (pg_trgm) voor fuzzy matching”?
Vind vergelijkbare tekenreeksen met de pg_trgm-extensie, GiST/GIN-trigramindexen en similarity(). Je oefent met SQL Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.
Heb ik ervaring nodig om met SQL Academy te beginnen?
Ervaring vooraf is niet nodig. SQL Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 1 van 4.
Hoe lang duurt de les “Trigram-zoeken (pg_trgm) voor fuzzy matching”?
De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.
Kan ik code schrijven en uitvoeren in deze les over SQL Academy?
Ja. Elke les over SQL Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.
Alle lessen in deze cursus
- Trigram-zoeken (pg_trgm) voor fuzzy matching
- Full-text search met tsvector en GIN
- Geospatiale indexering met PostGIS
- Vectorzoeken met pgvector