Full-text search met tsvector en GIN
Bouw production-ready full-text search met tsvector-kolommen, GIN-indexen en configureerbare full-text-zoekwoordenboeken.
Full-text search met tsvector en GIN is een gratis SQL Academy-les op CoddyKit. Dit is les 2 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.
Verder dan substring: zoeken op woorden
Zoeken in volledige tekst (FTS) begrijpt woorden: stamvorming, stopwoorden en rangschikking. PostgreSQL heeft dit ingebouwd via de types tsvector en tsquery.
Een tsvector opbouwen
Een document ontleden:
SELECT to_tsvector('english', 'The quick brown foxes jumped over');
-- 'brown':3 'fox':4 'jump':5 'quick':2Een tsquery opbouwen
Een zoekopdracht ontleden:
SELECT to_tsquery('english', 'fox & jumping'); -- 'fox' & 'jump'
SELECT websearch_to_tsquery('english', 'fox jumping -lazy');Matchen: @@
Een document testen tegen een zoekopdracht:
SELECT 'fox jumping'::tsvector @@ 'fox & jump'::tsquery; -- tIndexeren voor FTS
Voeg een tsvector-kolom en een GIN-index toe:
ALTER TABLE articles
ADD COLUMN search_doc tsvector
GENERATED ALWAYS AS (
to_tsvector('english', coalesce(title,'') || ' ' || coalesce(body,''))
) STORED;
CREATE INDEX articles_search_idx ON articles USING GIN (search_doc);Zoeken
Snel zoeken met filters:
SELECT id, title FROM articles
WHERE search_doc @@ websearch_to_tsquery('english', 'postgres performance')
ORDER BY ts_rank(search_doc, websearch_to_tsquery('english', 'postgres performance')) DESC
LIMIT 20;Rangschikken met ts_rank
ts_rank geeft resultaten een score op basis van woordfrequentie en positie. ts_rank_cd gebruikt dekkingdichtheid en houdt rekening met posities:
SELECT id, ts_rank_cd(search_doc, q) AS rank
FROM articles, websearch_to_tsquery('english', $1) AS q
WHERE search_doc @@ q
ORDER BY rank DESC LIMIT 20;Fragmenten met ts_headline
Toon overeenkomende fragmenten waarin de gevonden woorden zijn gemarkeerd:
SELECT ts_headline('english', body,
websearch_to_tsquery('english', $1),
'StartSel=<mark>, StopSel=</mark>, MaxFragments=2')
FROM articles
WHERE search_doc @@ websearch_to_tsquery('english', $1);Zoeken naar woordgroepen
Vind aangrenzende woorden:
SELECT * FROM articles
WHERE search_doc @@ phraseto_tsquery('english', 'database performance');Versterking van meerdere velden
Geef de titel meer gewicht dan de tekst met setweight:
ALTER TABLE articles
ADD COLUMN search_doc tsvector
GENERATED ALWAYS AS (
setweight(to_tsvector('english', coalesce(title,'')), 'A') ||
setweight(to_tsvector('english', coalesce(body,'')), 'B')
) STORED;Taalconfiguratie
De configuratie english bepaalt stopwoorden, stamvorming enzovoort. PostgreSQL wordt met veel talen geleverd; schakel per taal:
SELECT to_tsvector('turkish', 'Veritabanı performansı');Beperkingen van ingebouwde FTS
Geschikt voor talen die op Engels lijken en voor basisrangschikking. Overweeg voor geavanceerdere behoeften, zoals BM25, vectorinbeddingen en zoeken met facetten, Elasticsearch of OpenSearch naast Postgres.
Samenvatting
De FTS van PostgreSQL is een prima standaardkeuze.
- tsvector + tsquery + matchen met @@
- GIN-index voor snelheid
- websearch_to_tsquery voor invoer door gebruikers
- ts_rank/ts_headline voor gerangschikte resultaten met markeringen
Snelle controle
Je moet artikelen snel filteren met een zoekopdracht voor volledige tekst. Welke index gebruik je?
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 “Full-text search met tsvector en GIN” gratis?
Ja — de volledige tekst van “Full-text search met tsvector en GIN” 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 “Full-text search met tsvector en GIN”?
Bouw production-ready full-text search met tsvector-kolommen, GIN-indexen en configureerbare full-text-zoekwoordenboeken. 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 2 van 4.
Hoe lang duurt de les “Full-text search met tsvector en GIN”?
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