Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL 전체 텍스트 검색 설정 방법 - FULLTEXT 인덱스와 MATCH AGAINST 활용하기

대용량 텍스트 데이터에서 빠르고 정확한 검색이 필요하다면 MySQL의 FULLTEXT(전체 텍스트) 검색 인덱스를 활용하는 것이 가장 효과적입니다. 전체 텍스트 검색은 MATCH() ... AGAINST 구문을 사용하여 수행하며, 일반적인 LIKE 연산자보다 훨씬 뛰어난 성능과 관련도 기반 검색 결과를 제공합니다.

1. 샘플 테이블 생성

먼저 실습에 사용할 테이블을 생성해 보겠습니다.

mysql> create table DemoTable1542
    -> (
    -> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    -> Name varchar(20)
    -> );
Query OK, 0 rows affected (2.16 sec)

위 쿼리는 자동 증가하는 기본키 Id와 이름을 저장할 Name 컬럼으로 구성된 간단한 테이블을 만듭니다.

2. FULLTEXT 검색 인덱스 생성

다음으로 Name 컬럼에 전체 텍스트 검색 인덱스를 생성합니다. 인덱스가 있어야 MATCH() ... AGAINST 구문을 효율적으로 사용할 수 있습니다.

mysql> create fulltext index search_name on DemoTable1542(Name);
Query OK, 0 rows affected, 1 warning (10.51 sec)
Records: 0  Duplicates: 0  Warnings: 1
참고: FULLTEXT 인덱스는 InnoDB와 MyISAM 엔진 모두에서 지원되며, CHAR, VARCHAR, TEXT 타입 컬럼에만 생성할 수 있습니다.

3. 테스트 데이터 삽입

INSERT 명령어를 사용해 몇 개의 레코드를 추가합니다.

mysql> insert into DemoTable1542(Name) values('John Doe');
Query OK, 1 row affected (0.31 sec)
mysql> insert into DemoTable1542(Name) values('Chris Brown');
Query OK, 1 row affected (0.29 sec)
mysql> insert into DemoTable1542(Name) values('John Smith');
Query OK, 1 row affected (0.46 sec)
mysql> insert into DemoTable1542(Name) values('Adam Smith');
Query OK, 1 row affected (4.71 sec)

4. 저장된 데이터 확인

SELECT 문으로 테이블의 모든 레코드를 조회해 보겠습니다.

mysql> select * from DemoTable1542;

실행 결과는 다음과 같습니다.

+----+-------------+
| Id | Name        |
+----+-------------+
|  1 | John Doe    |
|  2 | Chris Brown |
|  3 | John Smith  |
|  4 | Adam Smith  |
+----+-------------+
4 rows in set (0.04 sec)

5. MATCH ... AGAINST로 전체 텍스트 검색 실행

이제 'John'이라는 단어가 포함된 레코드를 검색해 보겠습니다. BOOLEAN MODE를 사용하면 더 유연한 검색 조건을 지정할 수 있습니다.

mysql> select * from DemoTable1542 where match(Name) against('John' in boolean mode);

검색 결과는 다음과 같습니다.

+----+------------+
| Id | Name       |
+----+------------+
|  1 | John Doe   |
|  3 | John Smith |
+----+------------+
2 rows in set (0.03 sec)

정리

이처럼 MySQL에서는 FULLTEXT 인덱스를 생성한 후 MATCH() ... AGAINST 구문만으로 손쉽게 전체 텍스트 검색을 구현할 수 있습니다. BOOLEAN MODE 외에도 자연어 모드(NATURAL LANGUAGE MODE)나 쿼리 확장(WITH QUERY EXPANSION) 옵션을 활용하면 검색 정확도를 한층 더 높일 수 있으니, 프로젝트 요구 사항에 맞게 적절히 선택해서 사용하시기 바랍니다.