관리 메뉴

nalaolla

전체 텍스트 검색 사용 방법 본문

MS-SQL

전체 텍스트 검색 사용 방법

날아올라↗↗ 2015. 12. 20. 15:50
728x90

WEB을 개발 하다가 보면

DB에서 문제가 있는 것 중에 하나가

게시판이나 DB에서 문장을 검색하는 문제에 부딪치게 되는 것 같습니다.

 

이런 문제를 여러가지 방식으로 해결 할 수 있겠지만

그 중 DB 만으로 해결할 수 있는 문제는 FTS(전체 텍스트 검색)를 사용하는 방식입니다.

(전체 DB를 FULL SCAN 하지 않으신다면..^^;;)

 

게시판을 예를 들면

게시판에 글 수가 적다면 차라리 DB FULL SACN 하는 것이 좋을 것 같고

게시판에 글 수가 많다면 FTS DB FULL SACN 보다는 좋은 성능을 보일 것입니다.

DB FULL SACN FTS의 성능 구분점은 시스템 마다 다를 수 있기 때문에 각각에 시스템에 맞는 상황에

맞춰서 사용을 하시면 될 겁니다.

 

일단 여기서는 FTS에 사용방법에 대해서 이야기를 하는 것이니

FTS가 유리하다는 판단에서 이야기를 하겠습니다.

 

그럼 FTS 사용 방법과 적용 방법에 대해서 이야기 하겠습니다.

 

FTS 적용 방법

1.        FTS 활성화
MS-SQL
은 기본적으로 FTS가 비활성화 되어 있으니 이것을 활성화 해줍니다
[
실행]

exec sp_fulltext_database @action='enable'

 

2.        전체 텍스트 카탈로그 작성
[
실행]

exec sp_fulltext_catalog @ftcat = '카탈로그명', @action = 'create'

 

create는 변수 그대로 action입니다.

action에는 create / drop / stop / star_full 등등이 있습니다.

 

3.        개별 테이블에 대해 전체 텍스트 검색을 활성화
[
실행]

exec sp_fulltext_table @tabname = ‘테이블명', @action = '행동', @ftcat = '카탈로그명', @keyname = '인덱스명'

 

@keyname에는

Sp_helpindex ‘테이블명’ 을 하면 테이블에 index 리스트가 보이는데 이중에 가급적 CS index의 명을 입력해 줍니다.

 

4.        검색 column 추가
[
실행]

exec sp_fulltext_column @tabname = '테이블명, @colname ='컬럼명', @action ='add'

 

 

5.        인덱스 채우기
최초에는 카탈로그 안에 인덱스된 내용이 채워지 있지 않아서 인덱스 된 내용을 채워주는 작업을 해야 합니다.
[
실행]

exec sp_fulltext_table @tabname = '테이블명, @action = 'start_full'

 

적용 방법

1.        단어 또는 구절에 기반한 검색 
[
실행]

SELECT *

FROM 테이블명

WHERE contains(컬럼명,'검색어')

 

컬럼명에는 컬럼이 여러 개인데 전체에서 검색을 원할 경우 ‘*’ 로 처리하면 된다.

 

2.        단어 또는 구절에 기반한 검색이지만 조금은 느슨한(?) 검색
사용방법은 CONTAINS와 비슷하지만 검색결과에 대해서는 CONTAINS보다 확장되어 유사단어 까지 검색을 해줄 수 있다.
[
실행]

SELECT *

FROM 테이블명

WHERE FREETEXT(컬럼명,'검색어')

 

기타

위의 방법 이외에도 TABLE에 내용을 바로 저장해서 조인에 사용하거나 하는 방법도 있지만

많이 쓰이는 방법에 대해서만 적어 봤습니다.

 

그리고 최초에 인덱스를 채웠다고 해서 계속 적으로 인덱스가 차는 것은 아니므로

증분 채우기 또는 전체 인덱스 채우기를 해줘야 하는데

검색시 마다 증분 채우기를 해주던가

아니면 일정한 시간 마다 전체 인덱스 채우기를 해주시면

좀 더 유용하게 사용 하 실수 있을 것 같네요

728x90