Ich bin dabei die Suchfunktion in unserem Programm zu verbessern, damit sollen Namen nach ihrem Sprachklang gefunden und bestmöglich sortiert werden.
In der Personentabelle habe ich jeweils eine generated Spalte für den Namen und Vornamen der Person, in der der Name nach Kölner Phonetik kodiert vorliegt. Zum Beispiel:
Angenommen man möchte nach dem Namen und Vornamen Meier, Dieter suchen. Meine Abfrage sieht so aus:
Die Suchbegriffe werden nach Kölner Phonetik kodiert und in der Where-Bedinungen angegeben.
Zum Sortieren nutze ich die Levenshtein Distanz, je geringer der Wert, desto eher entspricht es dem Suchbegriff.
Leider befindet sich Neyer, Theodor über Lehner, Dieter, weil die Levenshtein-Distanz für den Namen Lehner zu Meier 3 beträgt, die Distanz von Neyer zu Meier aber 2.
In dem Fall würde ich gerne den direkten Treffer beim Vornamen oben sehen.
Habe bereits versucht, beide Begriffe in der levenshtein-funktion anzugeben:
Dadurch werden aber dennoch namen wie:
unterhalb von Neyer, Theodor einsortiert. Eine Idee was ich noch machen kann?
In der Personentabelle habe ich jeweils eine generated Spalte für den Namen und Vornamen der Person, in der der Name nach Kölner Phonetik kodiert vorliegt. Zum Beispiel:
name | vorname | soundex_name | soundex_vorname
-------------------------------------------------
Meier, Dieter, 67, 227
Neyer, Theodor, 67, 227
Lehner, Dieter, 567, 227
Angenommen man möchte nach dem Namen und Vornamen Meier, Dieter suchen. Meine Abfrage sieht so aus:
Code:
SELECT
name,
vorname
FROM
person
WHERE
person.soundex_name like '%67%' AND -- Meier
person.soundex_vorname like '%227%' --Dieter
ORDER BY
levenshtein('Meier', person.name),
levenshtein('Dieter', person.vorname);
Die Suchbegriffe werden nach Kölner Phonetik kodiert und in der Where-Bedinungen angegeben.
Zum Sortieren nutze ich die Levenshtein Distanz, je geringer der Wert, desto eher entspricht es dem Suchbegriff.
Leider befindet sich Neyer, Theodor über Lehner, Dieter, weil die Levenshtein-Distanz für den Namen Lehner zu Meier 3 beträgt, die Distanz von Neyer zu Meier aber 2.
In dem Fall würde ich gerne den direkten Treffer beim Vornamen oben sehen.
Habe bereits versucht, beide Begriffe in der levenshtein-funktion anzugeben:
levenshtein('Dieter Meier', person.name || ' ' || person.vorname);
Dadurch werden aber dennoch namen wie:
Attermeyer,Dieter,02767,227
unterhalb von Neyer, Theodor einsortiert. Eine Idee was ich noch machen kann?
Kölner Phonetik – Wikipedia
de.wikipedia.org
Levenshtein-Distanz – Wikipedia
de.wikipedia.org