Introduction
Dans les applications modernes, une recherche de texte efficace est cruciale, en particulier lorsqu'il s'agit de bases de données volumineuses. Bien que MySQL offre des fonctionnalités de base de recherche en texte intégral, il est insuffisant en matière de correspondance floue ou de gestion des fautes d'orthographe. C'est là qu'intervient la recherche basée sur les trigrammes. Dans ce blog, nous explorerons ce qu'est un trigramme, comment il améliore les performances de recherche et comment vous pouvez implémenter la recherche par trigramme dans MySQL.
Qu'est-ce qu'un trigramme ?
Un trigramme est une séquence de trois caractères consécutifs d'une chaîne donnée. Par exemple, le mot « recherche » peut être décomposé selon les trigrammes suivants :
Implémentation de la recherche de trigrammes dans MySQL en créant une table temporaire
1.Créer une fonction trigramme dans la base de données MySQL. Code de fonction du trigramme :
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.Indexation maintenant de la colonne souhaitée vers le texte intégral
@Entity() @Index(['title'], { fulltext: true }) export class Ebook extends BaseEntity { @PrimaryGeneratedColumn() ebookId: number; @Column({ nullable: true }) title: string; }
3.Test de la fonction de recherche de trigramme
select * FROM ebook e WHERE TRIGRAM_SEARCH('physis onlu', e.title) > 0.4 ORDER BY TRIGRAM_SEARCH('physis onlu', e.title) desc;
4.Implémenter la recherche de trigrammes dans le code
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; }
Conclusion
La recherche Trigram offre un moyen puissant d'implémenter la correspondance floue dans les bases de données MySQL. En décomposant le texte en trigrammes, nous pouvons effectuer des recherches plus flexibles et indulgentes, améliorant considérablement l'expérience utilisateur dans les applications où la recherche de texte est cruciale.
Bien que cette approche ait ses points forts, il est important d'envisager des alternatives telles que les algorithmes de distance de Levenshtein ou soundex en fonction de votre cas d'utilisation spécifique et de vos exigences de performances.
En implémentant la recherche par trigramme, vous pouvez améliorer considérablement les capacités de recherche de vos applications Node.js et MySQL, offrant ainsi aux utilisateurs des résultats de recherche plus intelligents et indulgents.
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3