✅ FULLTEXT INDEX란

// 해당 구문은 내부에 저장된 역색인(Inverted Index) 활용하여 대용량 텍스트에서도 빠르게 단어 포함 여부 판별
MATCH(content) AGAINST('커피' IN BOOLEAN MODE)

✅ 기본 구조(Inverted Index - 역색인)

"커피" -> [id=1, id=5, id=9]
"원두" -> [id=1, id=4, id=7]

✅ FULLTEXT INDEX를 사용 목적

목적 설명
LIKE '%keyword%' 대체 텍스트 컬럼 내 부분 일치 검색을 인덱스로 처리
전문 검색 기사, 리뷰, 게시글 등 긴 문서 검색
검색어 랭킹, 추천, 점수 기반 정렬 MATCH ... AGAINST 결과 점수 활용 가능

✅ 검색 모드

모드 문법 특징
Natural Language Mode AGAINST('커피') 자동 점수 계산, 불용어 무시
Boolean Mode AGAINST('커피 -라떼 +원두' IN BOOLEAN MODE) 논리 연산 지원 (+, -, "...", *)
With Query Expansion AGAINST('커피' WITH QUERY EXPANSION) 관련어 확장 검색 (실무에서 잘 안 씀)

✅ 인덱스 구성 시 주의점

ALTER TABLE snaps
ADD FULLTEXT INDEX idx_snaps_content (content) WITH PARSER ngram;

✅ 검색 동작 규칙

설정 항목 기본값 설명
innodb_ft_min_token_size 2 최소 단어 길이 (한글 1글자는 인덱스 안 됨)
ft_stopword_file stopword.txt 불용어 목록 (검색 제외 단어)
innodb_ft_enable_stopword ON 불용어 무시 기능 활성화