소개
최신 애플리케이션에서는 특히 대규모 데이터베이스를 처리할 때 효율적인 텍스트 검색이 중요합니다. MySQL은 기본적인 전체 텍스트 검색 기능을 제공하지만 퍼지 일치나 철자 오류 처리에 있어서는 부족합니다. 트라이그램 기반 검색이 시작되는 곳입니다. 이 블로그에서는 트라이그램이 무엇인지, 트라이그램이 검색 성능을 어떻게 향상시키는지, MySQL에서 트라이그램 검색을 구현하는 방법을 살펴보겠습니다.
트라이그램이란 무엇입니까?
트라이그램은 주어진 문자열에서 연속된 세 문자의 시퀀스입니다. 예를 들어, "search"라는 단어는 다음 트라이그램으로 구분될 수 있습니다.
임시 테이블을 생성하여 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 애플리케이션의 검색 기능을 크게 향상시켜 사용자에게 더욱 지능적이고 관대한 검색 결과를 제공할 수 있습니다.
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3