SQL Academy · Les

Full-text search met tsvector en GIN

Bouw production-ready full-text search met tsvector-kolommen, GIN-indexen en configureerbare full-text-zoekwoordenboeken.

Les 2 van 414 stappen

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':2

Een 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;     -- t

Indexeren 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?

Gratis beginnen

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

  1. Trigram-zoeken (pg_trgm) voor fuzzy matching
  2. Full-text search met tsvector en GIN
  3. Geospatiale indexering met PostGIS
  4. Vectorzoeken met pgvector
← Terug naar SQL Academy