Heim > Datenbank > MySQL-Tutorial > Wie kann ich Levenshtein-Abstandsberechnungen zwischen einer PHP-Anwendung und einer MySQL-Datenbank optimieren?

Wie kann ich Levenshtein-Abstandsberechnungen zwischen einer PHP-Anwendung und einer MySQL-Datenbank optimieren?

Patricia Arquette
Freigeben: 2024-12-05 15:34:10
Original
486 Leute haben es durchsucht

How can I optimize Levenshtein distance calculations between a PHP application and a MySQL database?

Levenshtein in MySQL und PHP: Ein optimierter Ansatz

Im ursprünglichen Codeausschnitt wird der Levenshtein-Abstand zwischen einem bestimmten Wort und jedem einzelnen Wort berechnet Begriff aus der Datenbank mithilfe der Levenshtein-Funktion in PHP. Dieser Ansatz erfordert jedoch mehrere Datenbankabfragen, was bei großen Datensätzen ineffizient sein kann. Eine effizientere Lösung besteht darin, die Levenshtein-Distanz als Filter innerhalb der Datenbankabfrage selbst zu nutzen.

Um dies zu erreichen, benötigen Sie eine in MySQL implementierte Levenshtein-Funktion. Sie können beispielsweise die folgende benutzerdefinierte Funktion in Betracht ziehen:

DELIMITER $$
CREATE FUNCTION levenshtein(s1 VARCHAR(255), s2 VARCHAR(255)) RETURNS INT
BEGIN
DECLARE len1 INT DEFAULT LENGTH(s1);
DECLARE len2 INT DEFAULT LENGTH(s2);
DECLARE i, j, cost, d INT DEFAULT 0;

DECLARE sp VARCHAR(255);

IF len1 = 0 THEN
    RETURN len2;
ELSEIF len2 = 0 THEN
    RETURN len1;
ELSE
    SET sp = REPEAT(' ', len1);
    FOR i = 1 TO len1 DO
        SET sp = CONCAT(sp, i);
    END FOR;
    SET sp = CONCAT(sp, CHAR(10));
    FOR j = 1 TO len2 DO
        SET sp = CONCAT(sp, j, CHAR(10));
        SET cost = j;
        FOR i = 1 TO len1 DO
            IF s1 SUBSTRING(i, 1) = s2 SUBSTRING(j, 1) THEN
                SET d = 0;
            ELSE
                SET d = 1;
            END IF;
            SET cost = LEAST(
                cost + 1,
                i + 1 + 1,
                j + d + 1
            );
            SET sp = CONCAT(sp, cost);
        END FOR;
    END FOR;
    SET sp = CONCAT(sp, CHAR(10));
    RETURN SUBSTRING_INDEX(sp, CHAR(10), -1) - len1 - 1;
END IF;
END$$
DELIMITER ;
Nach dem Login kopieren

Sobald die Levenshtein-Funktion in MySQL definiert ist, können Sie Ihre Abfrage wie folgt ändern:

$word = mysql_real_escape_string($word);
mysql_qery("SELECT `term` FROM `words` WHERE levenshtein('$word', `term`) BETWEEN 0 AND 4");
Nach dem Login kopieren

Diese Abfrage wird zurückgegeben alle Begriffe aus der Worttabelle, die einen Levenshtein-Abstand zwischen 0 und 4 zum angegebenen Wort haben. Indem Sie mehrere PHP-Schleifen vermeiden und sich auf die integrierte Funktion der Datenbank verlassen, können Sie insbesondere bei großen Datenmengen erhebliche Leistungsverbesserungen erzielen.

Das obige ist der detaillierte Inhalt vonWie kann ich Levenshtein-Abstandsberechnungen zwischen einer PHP-Anwendung und einer MySQL-Datenbank optimieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage