Datenbank

Volltextsuche einrichten

Profi-Suche ohne externe Services

Du brauchst kein Algolia oder Elasticsearch fuer eine gute Suchfunktion. PostgreSQL hat eine eingebaute Volltextsuche die fuer die meisten Apps voellig ausreicht. Kostenlos, schnell und direkt in deiner bestehenden Datenbank.

Pro-Tip — Der schnelle Weg
Erstell einen GIN-Index auf deine tsvector-Spalte. Ohne Index muss Postgres bei jeder Suche alle Zeilen durchgehen. Mit Index ist die Suche auch bei Millionen Eintraegen sofort.
Seite 1
1

tsvector-Spalte erstellen

tsvector ist der Postgres-Datentyp fuer durchsuchbaren Text. Er tokenisiert und normalisiert den Text automatisch. Erstell eine generierte Spalte die sich automatisch aktualisiert.

ALTER TABLE articles ADD COLUMN search_vector tsvector
GENERATED ALWAYS AS (
setweight(to_tsvector('german', coalesce(title, '')), 'A') ||
setweight(to_tsvector('german', coalesce(body, '')), 'B')
) STORED;
2

GIN-Index anlegen

Ein GIN-Index macht die Volltextsuche blitzschnell. Ohne Index ist die Suche bei grossen Tabellen unertraeglich langsam.

CREATE INDEX idx_articles_search ON articles USING GIN(search_vector);
3

Suchabfrage schreiben

Die Suche nutzt den @@ Operator. tsquery wandelt den Suchbegriff in ein Query-Format um. plainto_tsquery ist die einfachste Variante fuer User-Eingaben.

SELECT title, ts_rank(search_vector, query) AS rank
FROM articles, plainto_tsquery('german', 'kuenstliche intelligenz') query
WHERE search_vector @@ query
ORDER BY rank DESC;
4

In die App integrieren

Bau eine API-Route die den Suchbegriff entgegennimmt und die Postgres Volltextsuche ausfuehrt. Mit Supabase geht das direkt ueber den Client.

const { data } = await supabase
.rpc('search_articles', { search_query: 'KI Trends' })
Seite 2
Warum das funktioniert
  • Keine externen Services bedeutet keine Extra-Kosten
  • PostgreSQL Volltextsuche skaliert auf Millionen von Dokumenten
  • Deutsche Sprache wird nativ unterstuetzt mit Stemming
  • GIN-Indizes machen die Suche auch bei grossen Daten schnell
Tipps
  • Setweight gibt Titel-Treffern mehr Gewicht als Body-Treffern
  • Die german Konfiguration stemmt deutsche Woerter automatisch
  • Fuer Autocomplete nutz prefix-Matching mit :* am Ende der Query
  • Kombinier Volltextsuche mit Filtern fuer Kategorie oder Datum
Seite 3
Bereit für den nächsten Schritt?

KIWorld VibeCoding Masterclass

Du willst nicht nur einzelne Tools einrichten, sondern wirklich lernen wie du mit KI komplette Apps, Websites und SaaS-Produkte baust? Über 700 Videos — von Anfänger bis Fortgeschritten — in jedem Bereich. Von der Idee bis zum fertigen Produkt, ohne eine Zeile Code selbst zu schreiben.

Jetzt Masterclass ansehen