# 개념
'%'를 사용하여 LIKE 패턴 연산을 지원, 또는 구문에 대한 검색을 지원 |
검색 종류 | 설명 |
자연어 | 검색 문자열을 단어 단위로 분리한 후, 해당 단어 중 하나라도 포함되는 행 |
불린 모드 | 검색 문자열을 단어 단위로 분리한 후, 해당 단어가 포함되는 행을 찾는 규칙을 추가적으로 적용하여 해당 규칙에 매칭되는 행 |
쿼리 확장 | 단계에 걸쳐서 검색을 수행. 첫 단계에서는 자연어 검색을 수행한 후, 첫 번째 검색의 결과에 매칭된 행을 기반으로 검색 문자열을 재구성하여 두 번째 검색을 수행한다. 이는 1단계 검색에서 사용한 단어와 연관성이 있는 단어가 1단계 검색에 매칭된 결과에 나타난다는 가정을 전제 |
* 자연어 검색
- 단어 기준으로 검색 하기 때문에 “내용1” 키워드로 검색해도 "내용1입니다는 검색X.
- [해결방법] Mroonga 플러그인
* 불린 모드(boolean mode)
- 필수(+), 예외(-), 부분(*) ,구문(“”) 등 연산자를 사용 가능.
- 검색 키워드를 쌍따움표(“”) 로 묶으면 해당 전체 구문 그대로 포함된 게시글을 검색.
# 주의사항
기본적으로 FullText 검색은 default로 4자 이상의 단어 검색을 지원함. 2자 이상의 검색을 하기 위해서는 다음을 통해 글자수를 조정해야함
1. 확인
> SHOW VARIABLES LIKE '%ft%'; |
본인의 DB 종류에 따라서 수정해야할 변수가 달라짐. 기본적으로 Value 값이 4, 3으로 설정되어있음
2. 변경
윈도우환경의 경우 다음 경로에서 my.ini 파일을 수정해야 함
C:\ProgramData\MySQL\MySQL Server 8.0 |
2.1. 내용 추가
innodb_ft_min_token_size=2 ft_min_word_len=2 |
2.2. 저장 시 ANSI 형식으로 저장할 것
저장할 때 인코딩 형식이 utf-8로 저장될 경우가 있는데 그 때는 mysql80 서비스를 재시작하려고 할 때,
실행이 안되는 경우가 있음
2.3. 서비스 재시작
2.4. OPTIMIZE TABLE 테이블명
3. 테이블에 FULLTEXT 인덱스 추가
ALTER TABLE 테이블이름 ADD FULLTEXT INDEX이름 (필드이름) |
3.1. 인덱스 삭제 방법
ALTER TABLE 테이블이름 DROP INDEX 인덱스이름 |
3.2. 설정 변경 전 인덱스에 적용하기
REPAIR TABLE 테이블명 QUICK; |
4. 검색 쿼리
4.1. 자연어 검색 (OR조건)
SELECT * FROM 테이블명 WHERE MATCH(칼럼명) AGAINST('검색어1 검색어2'); |
4.2. 불린 모드 검색
SELECT * FROM 테이블명 WHERE MATCH(컬럼명) AGAINST(' +"검색어1*" +"검색어2"' in boolean mode) |
: 검색어1이 포함된, 내용 and 검색어2가 정확한 포함된 검색 (+: AND, -: NOT...)
[참고] https://medium.com/@sindepal/mariadb-fulltext-index-1292b1f2a695
[참고] http://tcpschool.com/mysql/mysql_index_add
[참고] https://mattgadient.com/how-to-remove-a-fulltext-index-in-mysql-switching-from-myisam-to-innodb/
'DB > MYSQL' 카테고리의 다른 글
[Mysql] Group by, Order by 정렬 순서 (2) | 2020.09.04 |
---|---|
[MySQL] Error: MySQL authentication plugin 'caching_sha2_password (0) | 2020.05.31 |
[MYSQL] DAYOFWEEK() /현재 요일 한글로 출력 (0) | 2020.03.02 |
[MySQL] 버전 확인 (0) | 2020.02.23 |