본문 바로가기
DB

인덱스

by 쬑께께 2022. 5. 13.

전체 텍스트 인덱스

텍스트로 이루어진 문자열 데이터의 내용을 가지고 생성한 인덱스

 

일반적인 인덱스와의 차이점

1. 전체 인덱스는 InnoDB와 MyISAM테이블만 지원

2. 전체 텍스트 인덱스는 char, varchar, text의 열에만 생성 가능

3. 인덱스 힌트의 사용이 일부 제한됨

4. 여러 개의 열에 FULLTEXT인덱스 지정할 수 있음

 

전체 텍스트 인덱스 생성 방법

방법 1.

CREATE TABLE 데이블 이름(

... 

열 이름 데이터 형식,

...

FULLTEXT 인덱스이름(열 이름)

);

 

방법 2.

CREATE TABLE 테이블이름(

...

열 이름 데이터 형식,

...

);

ALTER TABLE 테이블이름

    ADD FULLTEXT (열 이름);

 

방법 3.

CREATE TABLE 테이블이름(

...

열 이름 데이터 형식,

...

);

CREATE FULLTEXT INDEX 인덱스이름

ON 테이블이름 ( 열 이름);

 

전체 텍스트 인덱스 삭제

ALTER TABLE 테이블이름

    DROP INDEX FULLTEXT(열 이름);

 

중지단어

전체 텍스트 인덱슨느 긴 문장에 대해서 인덱스 생성하기에 양이 커짐

  => 검색에서 무시할 만한 단어들은 전체 텍스트 인덱스로 생성하지 않는 편이 좋음

* 필요하다면 사용자가 별도의 테이블에 중지 단어 푸가 후 적용시킬 수 있음

 

전체 텍스트 검색을 위한 쿼리

MATCH(col1, col2, ... ) AGAINST (expr[search_modifier])

*MATCH( ) 함수는 WHERE 절에 사용함

 

search_modifier 종류

IN VATURAL LANGUAGE MODE

IN VATURAL LANGUAGE MODE WIRH QUERY EXPANSION

IN BOOLEAN MODE

WITH QUERY EXPANSION

 

자연어 검색

영화라는 단어가 들어간 기사 찾기

SELECT * FROM newpaper

    WHERE MATCH(article) AGAINST('영화');

 

영화 또는 배우 중 하나가 포함된 기사 찾기 (띄어쓰기)

SELECT * FROM newpaper

    WHERE MATCH(article) AGAINST('영화 배우');

 

불린모드 검색

'영화를', '영화가', '영화는' 등의 영화가 앞에 들어간 결과 검색 (*)

SELECT * FROM newpaper

    WHERE MATCH(article) AGAINST('영화*' IN BOOLEAN MODE);

 

'영화 배우' 단어가 정확히 들어있는 기사 내용 검색

SELECT * FROM newpaper

    WHERE MATCH(article) AGAINST('영화 배우' IN BOOLEAN MODE);

 

'영화 배우' 단어가 들어있는 기사 중 '공포'의 내용이 꼭 들어간 내용 검색 (+)

SELECT * FROM newpaper

    WHERE MATCH(article) AGAINST('영화 배우 +공포' IN BOOLEAN MODE);

 

'영화 배우'단어가 들어있는 기사 중 '남자'의 내용은 검색에서 제외시키는 경우 (-)

SELECT * FROM newpaper

    WHERE MATCH(article) AGAINST('영화 배우 -남자' IN BOOLEAN MODE);

 

*위와 같이 2단어를 검색하고 싶을 경우 시스템 설정을 바꿔주어야 한다.

(MySQL은 기본적으로 3글자 이상만 전체 텍스트 생성하기 때문)

 

서비스 창 실행 > MySQL 더블 클릭 > 중지 버튼

파일 탐색기 > 숨김 항목 보이기 > C: > ProgramData > MySQL > MySQL Server 8.0 > my.init 파일 확인

메모장을 관리자 권한으로 실행 > my.init 파일 열기 > 파일의 제일 마지막에 innodb_ft_min_token_size=2 추가

* 파일 찾을 때 모든 파일로 찾을 것!!

 

MySQL 시작버튼 클릭 (재실행)

쿼리 문 실행 > 결과 값 확인

위와 같이 값이 2로 뜨면 시스템 설정을 바꾼 것이다.

 

'DB' 카테고리의 다른 글

LIMIT명령어와 그룹함수  (0) 2022.12.14
검색 쿼리문 정리  (0) 2022.12.13
스토어드와 인덱스, 커서, 트리거  (0) 2022.05.12
인덱스  (0) 2022.04.29
변수생성과 형변환, JSON  (0) 2022.04.14