MySQL FULLTEXT index 검색 사용하기 > 서버관리

본문 바로가기
사이트 내 전체검색

서버관리

MySQL FULLTEXT index 검색 사용하기

페이지 정보

profile_image
작성자 관리자 (61.♡.12.126)
댓글 0건 조회 3,412회 작성일 16-04-19 23:17

본문

MySQL 에서 제공하는 FULLTEXT 인덱스 검색 사용하기


0. 제약사항

FULLTEXT 인덱스는 MyISAM 엔진을 사용하는 테이블에 대해서만 생성할 수 있다.
또한 컬럼 데이터 타입은 반드시 Text, Binary Char, Varchar 타입을 가져야 한다.
또한 한글 데이터를 검색하려면 테이블 인코딩으로 utf8을 사용해야 한다.

MySQL 5.5 이하에서는 MyISAM에서만 사용할 수 있으나, MySQL 5.6부터는 InnoDB에서도 사용할 수 있다.


1. 최소 검색 글자 길이 값 변경

우선, 검색 글자 길이 최소값을 변경한다.
FULLTEXT 검색시에 최소 검색어 길이의 기본값은 4이다. 이를 2로 변경한다.

# my.cnf 파일의 [mysqld] 섹션에 아래를 추가한다.

[mysqld]
ft_min_word_len=2

이 작업은 나중에 해 주어도 되긴 하지만,
최소 글자수를 수정한 후에는, 인덱스를 재 생성시켜 주어야 한다.
REPAIR TABLE 테이블명 QUICK;


2. 테이블에 FULLTEXT 인덱스 생성하기

주의할 점은, FULLTEXT 인덱스를 생성하는 시간은 좀 오래 걸린다.
웹서비스 중이라면, 서비스가 엄청 느려지거나 죽은 것처럼 보이기도 한다.
20만건의 글이 있는 게시판의 제목에 FULLTEXT 인덱스를 생성하는 데 수분이 걸렸다.

인덱스 생성 쿼리문은 다음과 같다.
alter table 테이블명 add FULLTEXT(필드명);

phpMyAdmin 에서는,
테이블 구조 화면에서 각 필드의 오른쪽 편에 보면 FULLTEXT 가 보인다.
이걸 눌러 주면 된다. 누르면 확인없이 그냥 인덱스가 생성이 돌아간다. 주의하자.
참고로, phpmyadmin 버전이 높아지면서 확인버튼이 뜬다.

여러 필드를 같이 인덱스를 걸 수 있다. 예를들어 제목과 내용.
alter table posts 테이블명 add FULLTEXT(필드명1, 필드명2);


3. FULLTEXT 검색 쿼리문

쿼리문의 형태가 일반 like 구문과는 다르다.

기본 구문은 다음과 같다.
select * from 테이블명 where match(필드명) against('검색어') ;
스페이스로 나누어진 단어 단위로 검색을 하기 때문에, 단어가 '검색어' 와 일치하는 것만 검색된다.

검색어가 포함된 문자열을 검색하는 구문은 다음과 같다. 부분(*) 연산자라고 한다.
select * from 테이블명 where match(필드명) against('*검색어*' in boolean mode) ;

여러 단어를 검색하는 쿼리문
SELECT * FROM 테이블명
WHERE match(필드명) against('*검색어1*' in boolean mode) and match(필드명) against('*검색어2*' in boolean mode) ;

연속한 여러단어를 검색하는 쿼리문
select * from 테이블명
where match(필드명) against('"단어1 단어2"' in boolean mode);




** 참고 :
https://kmongcom.wordpress.com/2014/03/28/mysql-풀-텍스트fulltext-검색하기/
https://kmongcom.wordpress.com/2014/03/28/mysql-%ED%92%80-%ED%85%8D%EC%8A%A4%ED%8A%B8fulltext-%EA%B2%80%EC%83%89%ED%95%98%EA%B8%B0/

추천0

댓글목록

등록된 댓글이 없습니다.

Total 91건 3 페이지
  • RSS

검색


사이트 정보

Copyright © Baragi.Net. All rights reserved.