Introducción
En las aplicaciones modernas, la búsqueda de texto eficiente es crucial, especialmente cuando se trata de bases de datos grandes. Si bien MySQL proporciona capacidades básicas de búsqueda de texto completo, se queda corto cuando se trata de coincidencias aproximadas o manejo de errores ortográficos. Aquí es donde entra en juego la búsqueda basada en trigramas. En este blog, exploraremos qué es un trigrama, cómo mejora el rendimiento de la búsqueda y cómo se puede implementar la búsqueda de trigramas en MySQL.
¿Qué es un trigrama?
Un trigrama es una secuencia de tres caracteres consecutivos de una cadena determinada. Por ejemplo, la palabra "búsqueda" se puede dividir en los siguientes trigramas:
Implementación de la búsqueda de trigramas en MySQL creando una tabla temporal
1.Crear función Trigram en la base de datos MySQL. Código de función de trigrama:
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.Ahora indexando la columna deseada a texto completo
@Entity() @Index(['title'], { fulltext: true }) export class Ebook extends BaseEntity { @PrimaryGeneratedColumn() ebookId: number; @Column({ nullable: true }) title: string; }
3.Prueba de la función de búsqueda de trigramas
select * FROM ebook e WHERE TRIGRAM_SEARCH('physis onlu', e.title) > 0.4 ORDER BY TRIGRAM_SEARCH('physis onlu', e.title) desc;
4.Implementar la búsqueda de trigramas en el código
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; }
Conclusión
La búsqueda de Trigram ofrece una forma poderosa de implementar coincidencias difusas en bases de datos MySQL. Al dividir el texto en trigramas, podemos realizar búsquedas más flexibles y flexibles, lo que mejora enormemente la experiencia del usuario en aplicaciones donde la búsqueda de texto es crucial.
Si bien este enfoque tiene sus puntos fuertes, es importante considerar alternativas como la distancia de Levenshtein o los algoritmos Soundex según su caso de uso específico y sus requisitos de rendimiento.
Al implementar la búsqueda de trigramas, puede mejorar significativamente las capacidades de búsqueda de sus aplicaciones Node.js y MySQL, brindando a los usuarios resultados de búsqueda más inteligentes y tolerantes.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3