Database Reference
In-Depth Information
Das ist nützlich, wenn die Suche kleine Schreibfehler oder fehlende Wörter
tolerieren soll. Je länger der String, desto mehr Trigramme und desto eher
findet sich ein Treffer - sie eignen sich gut für Filmtitel, da diese immer ähn-
lich lang sind.
Wir erzeugen einen Trigramm-Index über die Filmnamen (wozu wir Genera-
lized Index Search Tree [GIST] nutzen, eine generische Index-API, die für die
PostgreSQL-Engine zur Verfügung steht).
CREATE INDEX
movies
_
title
_
trigram
ON
movies
USING
gist (title gist
_
trgm
_
ops);
Nun können unsere Anfragen auch kleinere Schreibfehler enthalten und wir
erhalten trotzdem vernünftige Ergebnisse.
SELECT
*
FROM
movies
WHERE
title %
'Avatre'
;
title
---------
Avatar
Trigramme sind eine gute Wahl, wenn man Benutzereingaben ohne Wild-
cards verarbeiten möchte.
Volltextsuche
Nun wollen wir den Benutzern Volltextsuchen basierend auf passenden Wör-
tern (auch im Plural) erlauben. Postgres unterstützt eine einfache maschinel-
le Sprachverarbeitung, d. h., ein Benutzer kann nach bestimmten Wörtern in
einem Filmtitel suchen, auch wenn er sich nicht an alle Wörter erinnert.
TSVector und TSQuery
Sehen wir uns einen Film an, der die Wörter
night
und
day
enthält. Das ist
genau die richtige Aufgabe für den Volltext-Queryoperator @@.
SELECT
title
FROM
movies
WHERE
title @@
'night & day'
;
title
-------------------------------
A Hard Day's Night
Six Days Seven Nights
Long Day's Journey Into Night