"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Correspondência difusa com pesquisa trigrama: construindo pesquisa inteligente em Node.js e MySQL

Correspondência difusa com pesquisa trigrama: construindo pesquisa inteligente em Node.js e MySQL

Publicado em 2024-11-09
Navegar:797

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

Introdução
Nas aplicações modernas, a pesquisa de texto eficiente é crucial, especialmente quando se lida com grandes bases de dados. Embora o MySQL forneça recursos básicos de pesquisa de texto completo, ele é insuficiente quando se trata de correspondência difusa ou tratamento de erros ortográficos. É aqui que entra em jogo a pesquisa baseada em trigramas. Neste blog, exploraremos o que é um trigrama, como ele melhora o desempenho da pesquisa e como você pode implementar a pesquisa de trigramas no MySQL.

O que é um trigrama?
Um trigrama é uma sequência de três caracteres consecutivos de uma determinada string. Por exemplo, a palavra "pesquisa" pode ser dividida nos seguintes trigramas:

  • mar
  • orelha
  • arco
  • rch Ao dividir as palavras em trigramas, podemos realizar uma correspondência de texto mais flexível e eficiente, especialmente ao tentar combinar termos incompletos ou com pequenos erros ortográficos.

Implementando pesquisa de trigrama no MySQL criando tabela temporária

1.Crie a função Trigram no banco de dados MySQL. Código de função do 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.Agora indexando a coluna desejada para texto completo

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

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

3.Teste da função de pesquisa de trigrama

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

4.Implementar pesquisa de trigrama no 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;
  }

Conclusão
A pesquisa Trigram oferece uma maneira poderosa de implementar correspondência difusa em bancos de dados MySQL. Ao dividir o texto em trigramas, podemos realizar pesquisas mais flexíveis e tolerantes, melhorando muito a experiência do usuário em aplicações onde a pesquisa de texto é crucial.
Embora essa abordagem tenha seus pontos fortes, é importante considerar alternativas como distância de Levenshtein ou algoritmos soundex, dependendo do seu caso de uso específico e dos requisitos de desempenho.
Ao implementar a pesquisa trigrama, você pode melhorar significativamente os recursos de pesquisa de seus aplicativos Node.js e MySQL, fornecendo aos usuários resultados de pesquisa mais inteligentes e tolerantes.

Declaração de lançamento Este artigo foi reproduzido em: https://dev.to/mukesh_rajbanshi/fuzzy-matching-with-trigram-search-building-intelligent-search-in-nodejs-and-mysql-2839?1 Se houver alguma violação, por favor entre em contato com study_golang@163 .comdelete
Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3