"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > Coincidencia difusa con búsqueda de Trigram: creación de búsqueda inteligente en Node.js y MySQL

Coincidencia difusa con búsqueda de Trigram: creación de búsqueda inteligente en Node.js y MySQL

Publicado el 2024-11-09
Navegar:480

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

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:

  • mar
  • oreja
  • arco
  • rch Al dividir las palabras en trigramas, podemos realizar una comparación de textos más flexible y eficiente, especialmente cuando intentamos hacer coincidir términos incompletos o ligeramente mal escritos.

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.

Declaración de liberación Este artículo se reproduce en: https://dev.to/mukesh_rajbanshi/fuzzy-matching-with-trigram-search-building-intelligent-search-in-nodejs-and-mysql-2839?1 Si hay alguna infracción, por favor contacto Study_golang@163 .comeliminar
Último tutorial Más>

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