긴 글에서 특정 단어를 포함하는 글을 찾고 싶을 때 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
반응형
'Computer Science > Database' 카테고리의 다른 글
[Java] 자바 어플리케이션에서 데이터베이스에 접속하는 방법 (Java, JDBC API, JDBC driver, MySQL) (0) | 2021.02.10 |
---|---|
[MySQL] Database 인덱스와 제약 조건 (Index, Constraint) (0) | 2021.02.09 |
[MySQL] 조인 (JOIN) 사용법 (0) | 2021.02.09 |
[MySQL] SQL문 사용법 (0) | 2021.02.09 |
[MySQL] 데이터베이스 개체의 종류 (0) | 2021.02.09 |