문제:
MySQL에서 BOOLEAN MODE 로 FULLTEXT 쿼리를 하려고 하는데, 검색어가 2글자인 경우 검색 안됨
해결책:
FULLTEXT 인덱스를 생성하는 기준에 캐릭터 개수에 대한 최소값이 있었기 때문이었다.
innoDB인 경우 기본적으로 3글자, MyISAM DB인 경우 4글자가 기본값이다.
최소값 기준은 MySQL의 innodb_ft_min_token_size 설정하면 변경할 수 있다.
인스턴스의 기본 설정값이기 때문에, 값을 변경한 후엔 디비 인스턴스를 리스타트해야 하고, 인덱스도 새로 만들어야 함.
1. 터미널에서 mysql 서버 내려준다
mysql.server stop
2. my.cnf 파일을 찾아 아래 내용을 추가해준다.
innodb_ft_min_token_size = 2
홈브루로 mysql을 설치한 경우 my.cnf 있는 경로
opt>homebrew>etc>my.cnf
터미널에서 수정하는 것이 익숙하지 않아 직접 파일을 찾아서 텍스트 편집기로 수정하고 저장했다.
3. 터미널에서 mysql 서버 실행
mysql.server start
4. 인덱싱 다시 하기
# ngram passer로 인덱싱하여 테이블에 저장
# [AUTHR_NM_IDX]이 만들어질 테이블 이름
# (AUTHR_NM) 인덱싱할 컬럼
alter table books add FULLTEXT index
TITLE_NM_test1(TITLE_NM)
만약 ngram parser를 사용한다면 이 과정이 필요없다.
# ngram passer로 인덱싱하여 테이블에 저장
# [AUTHR_NM_IDX]이 만들어질 테이블 이름
# (AUTHR_NM) 인덱싱할 컬럼
alter table books add FULLTEXT index
TITLE_NM_test1(TITLE_NM) WITH PARSER ngram;
인텔리제이 콘솔에서 확인하는 방법
#이노 db 최소 검색값 확인하기
SHOW VARIABLES LIKE 'innodb_ft_min_token_size';
참고:
- MySQL Full-Text Search: http://www.w3resource.com/mysql/mysql-full-text-search-functions.php
- 꿀벌 개발일지: https://ohgyun.com/730
- 꿀벌 개발일지: https://ohgyun.com/730