참조
Full Text Search란
- LIKE 연산을 통해 패턴 일치 검색을 사용하지만 인덱스를 활용하지 못하는 경우가 생김
- 이럴 때 고려할 수 있는 사항이 Full Text Search
- 단어 또는 구문에 대한 검색을 의미하며, 게시글 제목/내용 등에 대한 키워드 검색을 지원
- match against
- Full Text Search는 match against 구문을 통해 수행됨
- match는 쉼표로 구분되며 검색할 컬럼을 지정
- against는 검색할 문자열과 수행할 검색 유형을 나타내는 search modifier를 사용
- 사용 예시
MATCH (col1, col2, …) AGAINST (expr [search_modifier])
SELECT * FROM articles WEHRE MATCH (content) AGAINST ("covid_virus" in boolean mode)
Full Text Index
- MySQL에서 FULLTEXT 타입의 인덱스
- 사용 예시
ALTER TABLE articles ADD FULLTEXT INDEX ft_index(title, body) WITH PARSER ngram;
CREATE FULLTEXT INDEX ft_index ON articles (title, body) WITH PARSER ngram;
Condition
- Full Text Index는 InnoDB나 MyISAM 엔진에서만 사용 가능
- CHAR, VARCHAR, TEXT 타입의 컬럼에만 생성 가능
Parser
- 내장 파서로 ngram parser 지원
- 중국어, 일본어, 한글을 지원하며 일본어를 위한 플러그인 파서인 MeCab을 설치할 수 있음
Load Large Data
- 대규모 데이터셋의 경우에는 인덱스가 걸린 채 로드하는 것 보다 풀 스캔하는 게 빠를 수 있음
Search Types
- MySQL는 자연어 검색, 불리언 모드 검색, 쿼리 확장 검색의 3가지 종류의 FULLTEXT 검색 방식을 지원