„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Fuzzy Matching mit Trigram Search: Erstellen einer intelligenten Suche in Node.js und MySQL

Fuzzy Matching mit Trigram Search: Erstellen einer intelligenten Suche in Node.js und MySQL

Veröffentlicht am 09.11.2024
Durchsuche:480

Fuzzy Matching with Trigram Search: Building Intelligent Search in Node.js and MySQL

Einführung
In modernen Anwendungen ist eine effiziente Textsuche von entscheidender Bedeutung, insbesondere beim Umgang mit großen Datenbanken. Während MySQL grundlegende Volltextsuchfunktionen bietet, ist es nicht ausreichend, wenn es um Fuzzy-Matching oder den Umgang mit Rechtschreibfehlern geht. Hier kommt die trigrammbasierte Suche ins Spiel. In diesem Blog untersuchen wir, was ein Trigramm ist, wie es die Suchleistung verbessert und wie Sie die Trigrammsuche in MySQL implementieren können.

Was ist ein Trigramm?
Ein Trigramm ist eine Folge von drei aufeinanderfolgenden Zeichen einer bestimmten Zeichenfolge. Beispielsweise kann das Wort „Suche“ in die folgenden Trigramme unterteilt werden:

  • Meer
  • Ohr
  • Bogen
  • rch Durch die Aufteilung von Wörtern in Trigramme können wir eine flexiblere und effizientere Textübereinstimmung durchführen, insbesondere wenn wir versuchen, unvollständige oder leicht falsch geschriebene Begriffe zu finden.

Implementieren der Trigram-Suche in MySQL durch Erstellen einer temporären Tabelle

1. Trigram-Funktion in MySQL-Datenbank erstellen. Trigram-Funktionscode:

CREATE FUNCTION TRIGRAM_SEARCH(search_string VARCHAR(255), target_string VARCHAR(255)) 
RETURNS FLOAT
DETERMINISTIC
BEGIN
    DECLARE i INT DEFAULT 1;
    DECLARE total_trigrams INT DEFAULT 0;
    DECLARE matched_trigrams INT DEFAULT 0;
    DECLARE search_length INT;
    DECLARE target_length INT;

    SET search_length = CHAR_LENGTH(search_string);
    SET target_length = CHAR_LENGTH(target_string);

    -- Handle edge cases where strings are too short
    IF search_length  0 THEN
        RETURN matched_trigrams / total_trigrams;
    ELSE
        RETURN 0;
    END IF;
END;

2. Jetzt gewünschte Spalte in Volltext indizieren

@Entity()
@Index(['title'], { fulltext: true })
export class Ebook extends BaseEntity {
  @PrimaryGeneratedColumn()
  ebookId: number;

  @Column({ nullable: true })
  title: string;
}

3.Testen der Trigram-Suchfunktion

select *
FROM ebook e 
WHERE TRIGRAM_SEARCH('physis onlu', e.title) > 0.4
ORDER BY TRIGRAM_SEARCH('physis onlu', e.title) desc;

4. Trigrammsuche im Code implementieren

 async find(title?: string) {
        const eBooks = await this.dataSource
      .getRepository(Ebook)
      .createQueryBuilder('eBook');
    if (title) {
      eBooks.where(`TRIGRAM_SEARCH(:title, eBook.title) > 0.4`, { title });
    }
    const result = await eBooks.getMany();
    return result;
  }

Abschluss
Die Trigrammsuche bietet eine leistungsstarke Möglichkeit, Fuzzy-Matching in MySQL-Datenbanken zu implementieren. Durch die Aufteilung von Text in Trigramme können wir flexiblere und fehlerverzeihendere Suchvorgänge durchführen und so das Benutzererlebnis in Anwendungen, in denen die Textsuche von entscheidender Bedeutung ist, erheblich verbessern.
Obwohl dieser Ansatz seine Stärken hat, ist es wichtig, je nach Ihrem spezifischen Anwendungsfall und Ihren Leistungsanforderungen Alternativen wie Levenshtein-Distanz oder Soundex-Algorithmen in Betracht zu ziehen.
Durch die Implementierung der Trigrammsuche können Sie die Suchfunktionen Ihrer Node.js- und MySQL-Anwendungen erheblich verbessern und Benutzern intelligentere und fehlerverzeihendere Suchergebnisse liefern.

Freigabeerklärung Dieser Artikel ist abgedruckt unter: https://dev.to/mukesh_rajbanshi/fuzzy-matching-with-trigram-search-building-intelligent-search-in-nodejs-and-mysql-2839?1 Wenn es einen Verstoß gibt, bitte Kontaktieren Sie Study_golang@163 .comdelete
Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3