Computer Science/Database

[MySQL] 텍스트 검색 기능

2021. 2. 9. 13:10

긴 글에서 특정 단어를 포함하는 글을 찾고 싶을 때 MySQL의 FULLTEXT Index를 사용할 수 있다.

 

생성 및 삭제

/* FULLTEXT INDEX 생성 */
CREATE TABLE table1 (
	column1 TEXT,
    FULLTEXT fullTextIdx (column1)
);

ALTER TABLE table1 ADD FULLTEXT (column1);

CREATE FULLTEXT INDEX fullTextIdx ON table1(column1);

/* FULLTEXT INDEX 삭제 */
ALTER TABLE table1 DROP INDEX FULLTEXT (column1);

단어 검색

SELECT * FROM article
	WHERE MATCH(mainText) AGAINST('과학'); -- '과학'이 들어간 행을 리턴
    
	WHERE MATCH(mainText) AGAINST('과학 사회'); -- '과학' 혹은 '사회'가 들어간 행을 리턴
    
	WHERE MATCH(mainText) AGAINST('과학*' IN BOOLEAN MODE); -- '과학'이 앞에 들어간 단어를 포함하는 행을 리턴
    
	WHERE MATCH(mainText) AGAINST('과학 사회' IN BOOLEAN MODE); -- '과학 사회'가 들어간 행을 리턴
    
    WHERE MATCH(mainText) AGAINST('과학 +사회' IN BOOLEAN MODE); -- '과학'이 들어간 행 중에서 사회를 포함한 헹을 리턴
    
    WHERE MATCH(mainText) AGAINST('과학 -사회' IN BOOLEAN MODE); -- '과학'이 들어간 행 중에서 사회를 포함하지 않은 헹을 리턴
 
/*
이때 MySQL은 기본적으로 3글자 이상으로 전체 텍스트 인덱스를 생성하므로 이를 2글자 이상으로 바꾸고 싶다면
innodb_ft_min_token_size=2 를 my.ini 파일의 아래쪽에 추가한 후 MySQL 재시작
SHOW VARIABLES LIKE 'innodb_ft_min_token_size';
*/ 

 

 

728x90
반응형