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:
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.
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