데이터에서 검색 키워드 중심으로 조회하는 방식을 역 인덱스(Inverted Index) 구조라고 부른다.
MySQL의 일반 인덱스는 B-Tree 기반으로, 등가(=) 조건이나 범위(>, <, BETWEEN) 조건에서는 효율적이지만, LIKE '%검색어%'와 같이 문자열의 일부를 검색할 때는 일반 인덱스를 활용하기 어렵다.
하지만 Full-Text Index는 텍스트 데이터를 단어 단위로 분리하여 인덱싱하기 때문에, 키워드 기반의 전문 검색을 빠르게 수행할 수 있다.
이러한 Full-Text Index 방식을 전문 검색(Full-Text Search)이라 한다.
※ 참고
단순 키워드 매칭이나 기본적인 텍스트 검색 수준이라면 MySQL의 Full-Text Search 기능만으로도 충분하다.하지만 형태소 분석, 문맥 기반 검색, 다양한 조건 조합 등 고급 검색이 필요하다면, Elasticsearch 같은 전문 검색 엔진을 별도로 사용하는 것이 바람직하다.
MySQL에서 조건문에 LIKE %검색어% 방식으로 특정 검색어가 포함된 데이터를 조회할 수 있다.
하지만 LIKE %검색어% 조건은 인덱스를 사용할 수 없어서 별도의 FULLTEXT INDEX를 만들어 조회 성능을 높여야 한다.
CREATE FULLTEXT INDEX fidx_posts ON posts(title, content);
전문 검색을 사용하려면 FULLTEXT INDEX를 생성하고, 해당 컬럼을 대상으로 MATCH … AGAINST 구문을 사용해야 한다.
아래 예시는
title,content컬럼에 "전문 검색"이라는 검색어가 포함된 데이터를 빠르게 조회하는 예시다.SELECT * FROM posts WHERE 1=1 AND MATCH(title, content) AGAINST('전문 검색' IN NATURAL LANGUAGE MODE) ;
전문 검색은 다양한 모드가 존재한다.
+, -, *)를 사용하여 검색 가능