Database Reference
In-Depth Information
satzpaket
fuzzystrmatch
bereitgestellt. Betrachten wir mal die Strings
bat
und
fads
.
SELECT
levenshtein(
'bat'
,
'fads'
);
Die Levenshtein-Distanz ist 3, weil - verglichen mit dem String
bat
-zwei
Buchstaben ersetzt (b=>f, t=>d) und einer hinzugefügt werden mussten (+s).
Jede Änderung erhöht die Distanz. Die Distanz wird kleiner, je weiter wir uns
annähern. Die Distanz nimmt ab, bis sie Null erreicht (wenn beide Strings
gleich sind).
SELECT
levenshtein(
'bat'
,
'fad'
) fad,
levenshtein(
'bat'
,
'fat'
) fat,
levenshtein(
'bat'
,
'bat'
) bat;
fad | fat | bat
-----+-----+-----
2| 1| 0
Die Änderung der Groß-/Kleinschreibung kostet ebenfalls einen Punkt, d. h.,
Sie wandeln die Strings vor der Query besser in Groß- oder Kleinbuchstaben
um.
SELECT
movie
_
id, title
FROM
movies
WHERE
levenshtein(lower(title), lower(
'a hard day nght'
)) <= 3;
movie
_
id | title
----------+--------------------
245 | A Hard Day's Night
Damit stellen Sie sicher, dass unbedeutende Unterschiede sich nicht auf die
Distanz auswirken.
Trigramm
Ein Trigramm ist eine Gruppe dreier aufeinanderfolgender Zeichen aus einem
String. Das Zusatzmodul
pg
_
trgm
bricht einen String in soviele Trigramme
wie möglich auf.
SELECT
show
_
trgm(
'Avatar'
);
show
_
trgm
-------------------------------------
{"
a"," av","ar ",ata,ava,tar,vat}
Um einen passenden String zu finden, muss man nur die Anzahl passender
Trigramme zählen, die Strings mit den meisten Treffern sind am ähnlichsten.