Database Reference
In-Depth Information
name | dmetaphone | dmetaphone
_
alt | metaphone | soundex
----------------+------------+----------------+-----------+--------
50 Cent
| SNT
| SNT
| SNT
| C530
Aaron Eckhart | ARNK
| ARNK
| ARNKHRT
| A652
Agatha Hurle
| AK0R
| AKTR
| AK0HRL
| A236
:
Es gibt nicht die beste Funktion schlechthin. Die optimale Wahl hängt von
Ihren Daten ab.
String-Matches kombinieren
Da wir nun all unsere Suchtechniken beisammen haben, können wir damit
beginnen, sie auf interessante Art und Weise zu kombinieren.
Einer der flexibelsten Aspekte von Metaphones ist, dass die Ergebnisse ein-
fache Strings sind. Das erlaubt es uns, sie mit anderen String-Matchern zu
kombinieren.
Zum Beispiel können wir den Trigramm-Operator auf die
metaphone
-Ausga-
ben anwenden und die Ergebnisse nach der Levenshtein-Distanz sortieren.
Die folgende Query bedeutet: „Gib mir sortiert die Namen zurück, die sich
am ehesten nach
Robin Williams
anhören“.
SELECT
*
FROM
actors
WHERE
metaphone(name,8) % metaphone(
'Robin Williams'
,8)
ORDER BY
levenshtein(lower(
'Robin Williams'
), lower(name));
actor
_
id | name
----------+-----------------
2442 | John Williams
4090 | Robin Shou
4093 | Robin Williams
4479 | Steven Williams
Wie Sie sehen, ist das nicht perfekt. Robin Williams steht an dritter Stelle. Die
unkontrollierte Nutzung dieser Flexibilität kann zu sehr lustigen Ergebnissen
führen, also Vorsicht.
SELECT
*
FROM
actors
WHERE
dmetaphone(name) % dmetaphone(
'Ron'
);
actor
_
id | name
----------+-------------
3911 | Renji Ishibashi
3913 | Renée Zellweger
:
Die Kombinationsmöglichkeiten sind riesig und nur durch Ihre Experimen-
tierfreude beschränkt.