Fuzzy-Suche:

Levenshtein als GROUP-Funktion

Die Levenshtein-Distanz ist eine effiziente Möglichkeit, die Ähnlichkeit von Strings zu bestimmen (Fuzzy-Suche), Damit können beispielsweise Tippfehler bei der Verwendung von Suchfunktionen elegant korrigiert werden. Wenn man eine Anzeige im Stile von "Meinten Sie vielleicht ..." anzeigen möchte, braucht man hierzu eine Funktion die "das ähnlichste" Wort in einer Datenbanktabelle findet. Hierzu haben wir eine MySQL-GROUP-Funktion geschrieben.

Zunächst muss das Verzeichnis ermittelt werden, in dem MySQL die Plugin-Funktionen erwartet:

SHOW VARIABLES LIKE '%plugin_dir%';

Die Funktion kann dann mit folgendem Befehl in das eben ermittelte Verzeichnis kopiert werden:

sudo cp lv.so VERZEICHNIS

In manchen Installationen muss dieses Verzeichnis zuerst erstellt werden:

Beispiel:
sudo mkdir /usr/lib/mysql/plugin/
sudo cp lv.so /usr/lib/mysql/plugin/

Nun muss die Funktion MySQL noch bekannt gemacht werden. Dies geschieht mit folgendem SQL-Befehl, der als root ausgeführt werden sollte.

CREATE AGGREGATE FUNCTION lv RETURNS STRING SONAME "lv.so";

Falls man die Funktion wieder entfernen möchte, so geht das mit folgendem Befehl:

DROP FUNCTION lv;

Nun kann die Funktion in MySQL-Abfragen verwendet werden. Sie erwartet drei Parameter, der dritte ist dabei optional. Der erste bezeichnet des Namen des Feldes, das verglichen werden soll. Der zweite Parameter enthält den Suchstring. Als dritter Parameter kann die maximal erwünschte Levenshtein-Distanz angegeben werden. Ein kleiner Wert beschleunigt die Berechnung. Der Vorgabewert ist 2.

SELECT lv(Feldname, 'Suchstring') FROM Tabelle;

Demo

Probieren Sie es aus:

Lizenzen

für kommerziellen/geschäftlichen Einsatz:

Sie können zum Preis von 149 EUR* zzgl. MwSt. die Lizenz für den kommerziellen Einsatz erhalten. Sie erhalten dann den Quelltext sowie ein Beispiel-Script zur Erstellung einer Indextabelle per cronjob und ein Beispiel-Script zur Nutzung der Funktion. Das Beispiel-Script bezieht sich bei der Vorschlagsreihenfolge zusätzlich auf die Auftrittswahrscheinlichkeiten der einzelnen Wörter. Sie können die Funktion selbst kompilieren und/oder anpassen. Eine vorkompilierte Version für Debian 8 Jessie 64-bit liegt ebenfalls bei.

Lieferumfang:

  • C++ - Quellcode
  • kompilierte Version für Debian 8 Jessie 64-bit
  • MySQL-Datei mit Beispiel-Tabellendefinition
  • PHP-Skript zur Erstellung des Indexes als cronjob
  • PHP-Beipspielskript zur Abfrage und Anzeige (entspricht obiger Demo)

Wenn Sie am SourceCode der Funktion interessiert sind, verwenden Sie bitte das Kontaktformular, schreiben Sie eine E-Mail an info@teamarbyte.de oder kontaktieren Sie uns direkt unter +49 7621 / 160 9000.

*) Bitte kontaktieren Sie uns für ein konkretes Angebot.