전체 텍스트 검색은 첫 글자 뿐 아니라 중간의 단어나 문장으로도 인덱스를 생성해 주기 때문에,
전체 텍스트 인덱스를 통해 순식간에 검색 결과를 얻을 수 있다.
InnoDB와 MyISAM 테이블만 지원하며, char, varchar, text타입 문자만 인덱싱이 가능하다.
인덱스 기법
Stop-word parser 👈 default 옵션
→ 공백이나 Tab, 문장 기호, 또는 사용자가 정의한 문자열을 기준으로 토큰을 나누는 기법
ex> 아빠가 방에 들어갔다. → 아빠가 / 방에 / 들어갔다.
N-gram parser
→ n-gram 기법을 사용하여 할당한 토큰의 크기 n만큼씩 데이터를 인덱스로 파싱해두었다가 사용하는 기법
ex> 아빠가 방에 들어갔다. → 아빠 / 빠가 / 방에 / 들어 / 어갔 / 갔다.
ex) WITH PARSER ngram
Test Data
create table FulltextTbl (
id int auto_increment primary key,
title varchar(15) not null,
description varchar(1000)
) ;
alter table FulltextTbl add fulltext (description);
show indexes from FulltextTbl;
INSERT INTO FulltextTbl VALUES
(NULL, '광해, 왕이 된 남자','왕위를 둘러싼 권력 다툼과 당쟁으로 혼란이 극에 달한 광해군 8년'),
(NULL, '간첩','남한 내에 고장간첩 5만 명이 암약하고 있으며 특히 권력 핵심부에도 침투해있다.'),
(NULL, '피에타',' 더 나쁜 남자가 온다! 잔혹한 방법으로 돈을 뜯어내는 악마같은 남자 스토리.'),
(NULL, '레지던트 이블 5','인류 구원의 마지막 퍼즐, 이 여자가 모든 것을 끝낸다.'),
(NULL, '파괴자들','사랑은 모든 것을 파괴한다! 한 여자를 구하기 위한, 두 남자의 잔인한 액션 본능!'),
(NULL, '킹콩을 들다',' 역도에 목숨을 건 시골소녀들이 만드는 기적 같은 신화.'),
(NULL, '테드','지상최대 황금찾기 프로젝트! 500년 전 사라진 황금도시를 찾아라!'),
(NULL, '타이타닉','비극 속에 침몰한 세기의 사랑, 스크린에 되살아날 영원한 감동'),
(NULL, '8월의 크리스마스','시한부 인생 사진사와 여자 주차 단속원과의 미묘한 사랑'),
(NULL, '늑대와 춤을','늑대와 친해져 모닥불 아래서 함께 춤을 추는 전쟁 영웅 이야기'),
(NULL, '국가대표','동계올림픽 유치를 위해 정식 종목인 스키점프 국가대표팀이 급조된다.'),
(NULL, '쇼생크 탈출','그는 누명을 쓰고 쇼생크 감옥에 감금된다. 그리고 역사적인 탈출.'),
(NULL, '인생은 아름다워','귀도는 삼촌의 호텔에서 웨이터로 일하면서 또 다시 도라를 만난다.'),
(NULL, '사운드 오브 뮤직','수녀 지망생 마리아는 명문 트랩가의 가정교사로 들어간다'),
(NULL, '매트릭스',' 2199년.인공 두뇌를 가진 컴퓨터가 지배하는 세계.') ;
select * from FulltextTbl;
전체 텍스트 검색
- 검색 시에 쿼리의 일반 SELECT문의 WHERE절에 MATCH(), AGAINST() 특수한 메소드를 사용해야 전체 텍스트 인덱스를 사용하여 검색이 된다.
- 자연어 검색 : 특별한 옵션을 지정하지 않거나 in natural language mode 붙이면 자연어 검색을 한다.
- 단어가 정확한 것을 검색한다.
ex) 사랑에, 사랑할 등 검색은 불가 '사랑은' 에 해당하는 것만 검색 가능
- 불린 검색 : in boolean mode 붙이면 불린 검색을 한다. like 연산자에서 %를 쓰는것 같은 검색
- 불린 모드 검색은
필수인 +,
제외하기 위한 -,
부분 검색을 위한 * 연산자 등의 다양한 연산자를 지원한다.
'Mysql & Maria > admin' 카테고리의 다른 글
mysql lock 발생 테스트 (1) | 2023.11.26 |
---|---|
mysql 성능 I/O 읽기/쓰기 관련 측정 (0) | 2023.11.02 |
mysql int(10) / bigint(20) 등 괄호 안 숫자의 의미 (0) | 2023.07.20 |
Ascending index vs Descending index (0) | 2023.07.06 |
MySQL Character set 처리 (0) | 2023.07.05 |