0Pricing
SQL Academy · Lektion

Volltextsuche mit tsvector und GIN

Erstellen Sie eine produktionsfähige Volltextsuche mit tsvector-Spalten, GIN-Indizes und konfigurierbaren Volltextsuchwörterbüchern.

Volltextsuche mit tsvector und GIN ist eine kostenlose SQL Academy-Lektion auf CoddyKit. Dies ist Lektion 2 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des SQL Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der SQL Academy-Kurs umfasst insgesamt 4 Lektionen.

Über Teilzeichenfolgen hinaus: wortbasierte Suche

Die Volltextsuche (FTS) versteht Wörter: Stemming, Stoppwörter und Ranking. PostgreSQL unterstützt sie über die integrierten Typen tsvector und tsquery.

Einen tsvector erstellen

Ein Dokument analysieren:

SELECT to_tsvector('english', 'The quick brown foxes jumped over');
-- 'brown':3 'fox':4 'jump':5 'quick':2

Eine tsquery erstellen

Eine Abfrage analysieren:

SELECT to_tsquery('english', 'fox & jumping');     -- 'fox' & 'jump'
SELECT websearch_to_tsquery('english', 'fox jumping -lazy');

Abgleichen: @@

Ein Dokument anhand einer Abfrage prüfen:

SELECT 'fox jumping'::tsvector @@ 'fox & jump'::tsquery;     -- t

Indizierung für FTS

Eine tsvector-Spalte und einen GIN-Index hinzufügen:

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);

Abfragen

Schnelle gefilterte Suche:

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;

Ranking mit ts_rank

ts_rank bewertet Ergebnisse anhand der Worthäufigkeit und der Position. ts_rank_cd verwendet Cover Density (positionsbezogen):

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;

Ausschnitte mit ts_headline

Gefundene Textabschnitte anzeigen und die gefundenen Wörter hervorheben:

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);

Phrasensuche

Benachbarte Wörter finden:

SELECT * FROM articles
WHERE search_doc @@ phraseto_tsquery('english', 'database performance');

Gewichtung mehrerer Felder

Den Titel mit setweight stärker gewichten als den Text:

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;

Sprachkonfiguration

Die Konfiguration english definiert Stoppwörter, Stemming usw. PostgreSQL wird mit vielen Sprachen ausgeliefert; wechseln Sie je nach Sprache:

SELECT to_tsvector('turkish', 'Veritabanı performansı');

Grenzen der integrierten FTS

Gut geeignet für Sprachen ähnlich dem Englischen und für einfaches Ranking. Für weitergehende Anforderungen (BM25, Vektor-Embeddings, facettierte Suche) können Sie Elasticsearch oder OpenSearch zusammen mit Postgres verwenden.

Zusammenfassung

Die PostgreSQL-FTS ist eine solide Standardlösung.

  • tsvector + tsquery + @@-Abgleich
  • GIN-Index für hohe Geschwindigkeit
  • websearch_to_tsquery für Benutzereingaben
  • ts_rank/ts_headline für gerankte und hervorgehobene Ergebnisse

Schnelltest

Sie müssen Artikel anhand einer Volltextabfrage schnell filtern. Welcher Index ist geeignet?

Häufig gestellte Fragen

Ist die Lektion „Volltextsuche mit tsvector und GIN“ kostenlos?

Ja — der vollständige Text von „Volltextsuche mit tsvector und GIN“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des SQL Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der SQL Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Volltextsuche mit tsvector und GIN“?

Erstellen Sie eine produktionsfähige Volltextsuche mit tsvector-Spalten, GIN-Indizes und konfigurierbaren Volltextsuchwörterbüchern. Du übst SQL Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um SQL Academy zu starten?

Keine Vorkenntnisse erforderlich. SQL Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 2 von 4.

Wie lange dauert die Lektion „Volltextsuche mit tsvector und GIN“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser SQL Academy-Lektion Code schreiben und ausführen?

Ja. Jede SQL Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Trigramm-Suche (pg_trgm) für unscharfe Übereinstimmungen
  2. Volltextsuche mit tsvector und GIN
  3. Geodatenindizierung mit PostGIS
  4. Vektorsuche mit pgvector
← Zurück zu SQL Academy