0Pricing
SQL Academy · Lektion

Trigramm-Suche (pg_trgm) für unscharfe Übereinstimmungen

Finden Sie ähnliche Zeichenketten mit der Erweiterung pg_trgm, GiST-/GIN-Trigramm-Indizes und similarity().

Trigramm-Suche (pg_trgm) für unscharfe Übereinstimmungen ist eine kostenlose SQL Academy-Lektion auf CoddyKit. Dies ist Lektion 1 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.

Warum Trigramme?

LIKE %word% kann keinen B-tree-Index verwenden. Trigramme („3-Zeichen-Teilfolgen“) liefern in Kombination mit GIN/GiST eine schnelle Fuzzy- und Teiltextsuche.

Die Erweiterung aktivieren

pg_trgm wird mit PostgreSQL contrib ausgeliefert:

CREATE EXTENSION IF NOT EXISTS pg_trgm;

Trigramm eines Wortes

Die Trigramme einer Zeichenfolge anzeigen:

SELECT show_trgm('database');
-- {dat, aba, atab, tab, abas, base, ase, ...}

Ähnlichkeitsfunktion

Gleitkommawert im Bereich [0..1]:

SELECT similarity('database', 'datbase');     -- ~0.75
SELECT similarity('hello', 'world');             -- ~0.0

Der %-Operator

Gibt true zurück, wenn die Ähnlichkeit über dem Schwellenwert liegt (Standardwert 0.3):

SELECT 'database' % 'datbase';      -- t
SET pg_trgm.similarity_threshold = 0.4;

Index für die Teiltextsuche

Ein GIN-Trigramm-Index macht LIKE '%word%' schnell:

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 und GIN

  • GIN – schnellere Lesevorgänge, langsamere Schreibvorgänge, größerer Index
  • GiST – schnellere Schreibvorgänge, langsamere Lesevorgänge, kleinerer Index

Die meisten Teams wählen GIN für die Fuzzy-Suche.

Abfragen für Fuzzy-Matches

Ähnliche Zeichenfolgen auch bei Tippfehlern finden:

SELECT full_name, similarity(full_name, 'datbase') AS sim
FROM users
WHERE full_name % 'datbase'
ORDER BY sim DESC
LIMIT 10;

Distanz für die Rangfolge

Der <->-Operator gibt die Distanz zurück (1 - similarity), sodass Sie ORDER BY distance ASC verwenden können:

SELECT full_name
FROM users
WHERE full_name % 'alice'
ORDER BY full_name <-> 'alice'
LIMIT 10;

Autocomplete mit Trigrammen

Kombinieren Sie pg_trgm mit einem LIKE-Präfix für eine schnelle Autovervollständigung:

SELECT name
FROM products
WHERE name % $1
   OR name ILIKE $1 || '%'
ORDER BY similarity(name, $1) DESC
LIMIT 8;

Grenzen von Trigrammen

Trigramme arbeiten mit dem Alphabet der Eingabe. Für CJK-Sprachen ist eine andere Tokenisierung erforderlich. Verwenden Sie für die vollständige Suche in natürlicher Sprache tsvector + GIN.

Kombination mit anderen Indizes

Eine Abfrage mit mehreren Filtern kann über Bitmap And sowohl einen Trigramm-Index als auch einen B-tree verwenden:

EXPLAIN ANALYZE
SELECT * FROM users
WHERE full_name ILIKE '%ali%' AND country = 'US';

Zusammenfassung

pg_trgm löst das Problem des „führenden Wildcards“.

  • GIN-Trigramm-Index → schnelles LIKE %x%
  • %-Operator und similarity() für Fuzzy-Matches
  • <->-Distanz für die Rangfolge
  • Ideal für Autovervollständigung und eine fehlertolerante Suche

Schnelltest

Warum kann ein regulärer B-Tree-Index bei WHERE name LIKE '%alice%' nicht helfen?

Häufig gestellte Fragen

Ist die Lektion „Trigramm-Suche (pg_trgm) für unscharfe Übereinstimmungen“ kostenlos?

Ja — der vollständige Text von „Trigramm-Suche (pg_trgm) für unscharfe Übereinstimmungen“ 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 „Trigramm-Suche (pg_trgm) für unscharfe Übereinstimmungen“?

Finden Sie ähnliche Zeichenketten mit der Erweiterung pg_trgm, GiST-/GIN-Trigramm-Indizes und similarity(). 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 1 von 4.

Wie lange dauert die Lektion „Trigramm-Suche (pg_trgm) für unscharfe Übereinstimmungen“?

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