이글의 출처는 MSDN(http://technet.microsoft.com/ko-kr/library/ms142547.aspx) 입니다.
1. 전체 텍스트 검색(Full Text Search) 개요
Express Edition을 제외한 모든 버전.
Express Edition의 경우 별도의 서비스를 추가로 설치할 경우 가능하다고 합니다.
자세한 정보는 다음 링크를 참조하세요. SQL Server Features Comparison
◎ 특장점
- 특정 언어의 규칙을 기준으로 단어와 구에 적용되어 언어 검색.(구 검색 및 근접 단어 검색)
- 수백만 개의 텍스트 데이터 행에 대한 LIKE 쿼리에 비해 빠르다.(전자가 수 분이라면, 후자는 수 초 이내)
- char, varchar, nvarchar,text, ntext 뿐 아니라 varbinary(max), image등에 저장된 MS Word 문서와 같이 서식 있는 이진 데이터에 대해서도 검색 수행, LIKE는 불가
◎ 전제조건
- 테이블에 고유한 단일 열 필요
◎ 검색 처리
- 검색 엔진이 검색 조건과 일치하는 행의 키 값을 SQL Server에 반환.
2) 전체 텍스트 검색 아키텍처

* 전용 검색 엔진이 존재합니다. (MSFTESQL)
◎ 구성 프로세스
- SQL Server 프로세스(Sqlserver.exe)
- SQL Server용 Microsoft 전체 텍스트 검색 엔진 프로세스(Msftesql.exe)
- Microsoft 전체 텍스트 검색 엔진 필터 데몬 프로세스(Msftefd.exe)
◎ 프로세스 별 용도는 다음과 같다.
ㄱ. SQL Server 프로세스
: 사용자 테이블(인덱싱 대상 데이터)과 키 맵(전체 텍스트 키 열의 데이터 값과 내부 문서 ID 간의 매핑))
: Microsoft 전체 텍스트 Gatherer(전체 텍스트 카탈로그 모니터링, 인덱스 채우기를 예약 및 수행)
ㄴ. MSFTESQL
: 전체 텍스트 카탈로그 채우기 및 관리
: 전체 텍스트 검색을 지원
: 다음의 구성요소를 호스팅
i) 필터 데몬 관리자 : MSFTEFD 프로세스 상태 모니터링
ii) 인덱서 : 인덱싱된 토큰 저장을 위한 반전된 인덱스 구조 작성
iii) 동의어 사전 파일 : 검색어의 동의어 포함
iv) 의미 없는 단어 파일 : 검색은 자주 되지만 의미 없는 단어 목록
v) 단어 분리기 : 대상 데이터에 대한 언어 분석 수행. 텍스트 스트림에서 단어의 경계를 결정.
vi) 형태소 분석기 : 지정된 단어의 어근 추출(running, ran, runner -> 어근 = run)
* 쿼리가 FREETEXT 쿼리이거나 활용 형태상의 확장을 요구하면 형태소 분석기를 호출합니다.
ㄷ. MSFTEFD
: 인덱싱 프로세스 수행 중 MSFTESQ 서비스에 의해 시작된다.
: 다음의 구성요소 호스팅
i) 프로토콜 처리기 : 테이블의 데이터 액세스
ii) 필터 : 문서에서 텍스트 스트림 추출하고 서식정보 제거
iii) 단어 분리기 및 형태소 분석기
◎ 내부 테이블
- fulltext_index_map : 전체 텍스트 키 열 및 문서 내부 ID간 매핑 정보
- fulltext_catalog_freelist : 사용하지 않는 문서 ID
◎ 4가지 기본작업
- 전체 텍스트 인덱스 및 전체 텍스트 카탈로그 만들기
- 기존의 전체 텍스트 인덱스 및 카탈로그 변경
- 기존의 전체 텍스트 인덱스 및 카탈로그 삭제
- 인덱스 채우기 일정 및 유지 관리
◎ 4가지 수행 수준
- 서버 수준
resource_usage와 같은 서버 차원의 특정 속성을 설정하여 전체 텍스트 서비스에 사용되는 시스템 리소스의 양을 조절
- 데이터베이스 수준
MSFTESQL 서비스 설정 및 해제
데이터베이스에 하나 이상의 전체 텍스트 카탈로그에 대한 메타데이터를 관리
- 테이블 수준
전체 텍스트 지원 설정
테이블의 전체 텍스트 정의가 변경되면 관련된 전체 텍스트 카탈로그를 다시 채워 전체 텍스트 인덱스와 새로운 전체 텍스트 정의를 동기화
- 열 수준
전체 텍스트 쿼리를 지원하는 열 관리
◎ 전체 텍스트 카탈로그에 전체 텍스트 인덱스 배치 : 중요
- 전체 텍스트 고유 키에 가장 작은 인덱스 선택(4바이트 정수 기반 인덱스 추천)
최대 크기는 900바이트, 초과할 경우 전체 텍스트 채우기를 계속할 수 없습니다.
- 수백 만 개의 행을 가진 테이블의 인덱스를 만들 때는 테이블을 자신의 전체 텍스트 카탈로그에 할당.
- 변경되는 행 수와 마지막 전체 텍스트 채우기에서 나타난 테이블 행 수가 수백만 개이면 전체 텍스트 카탈로그에 할당
댓글을 달아 주세요