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