"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > Trigram 검색을 사용한 퍼지 일치: Node.js 및 MySQL에서 지능형 검색 구축

Trigram 검색을 사용한 퍼지 일치: Node.js 및 MySQL에서 지능형 검색 구축

2024-11-09에 게시됨
검색:127

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

소개
최신 애플리케이션에서는 특히 대규모 데이터베이스를 처리할 때 효율적인 텍스트 검색이 중요합니다. MySQL은 기본적인 전체 텍스트 검색 기능을 제공하지만 퍼지 일치나 철자 오류 처리에 있어서는 부족합니다. 트라이그램 기반 검색이 시작되는 곳입니다. 이 블로그에서는 트라이그램이 무엇인지, 트라이그램이 검색 성능을 어떻게 향상시키는지, MySQL에서 트라이그램 검색을 구현하는 방법을 살펴보겠습니다.

트라이그램이란 무엇입니까?
트라이그램은 주어진 문자열에서 연속된 세 문자의 시퀀스입니다. 예를 들어, "search"라는 단어는 다음 트라이그램으로 구분될 수 있습니다.

  • 바다
  • rch 단어를 트라이그램으로 분해함으로써 특히 불완전하거나 철자가 약간 틀린 용어를 일치시키려고 할 때 더욱 유연하고 효율적인 텍스트 일치를 수행할 수 있습니다.

임시 테이블을 생성하여 MySQL에서 Trigram 검색 구현

1.MySQL 데이터베이스에 트라이그램 함수를 생성합니다. 트라이그램 기능 코드:

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.이제 원하는 열을 전체 텍스트로 인덱싱합니다.

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

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

3.트라이그램 검색 기능 테스트

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

4.코드에 트라이그램 검색 구현

 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;
  }

결론
Trigram 검색은 MySQL 데이터베이스에서 퍼지 매칭을 구현하는 강력한 방법을 제공합니다. 텍스트를 트라이그램으로 분할함으로써 보다 유연하고 관용적인 검색을 수행할 수 있으므로 텍스트 검색이 중요한 애플리케이션에서 사용자 경험이 크게 향상됩니다.
이 접근 방식에는 장점이 있지만 특정 사용 사례 및 성능 요구 사항에 따라 Levenshtein 거리 또는 soundex 알고리즘과 같은 대안을 고려하는 것이 중요합니다.
트라이그램 검색을 구현하면 Node.js 및 MySQL 애플리케이션의 검색 기능을 크게 향상시켜 사용자에게 더욱 지능적이고 관대한 검색 결과를 제공할 수 있습니다.

릴리스 선언문 이 기사는 https://dev.to/mukesh_rajbanshi/fuzzy-matching-with-trigram-search-building-intelligent-search-in-nodejs-and-mysql-2839?1에서 복제됩니다. 침해가 있는 경우, 문의: Study_golang@163 .comdelete
최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3