[MS-SQL] 간단하게 Full Text Search 테스트 하기 Database
2009/03/10 14:36
http://blog.naver.com/ssitech/70043620994
일단은... 쿼리분석기를 연다. -_-
그리고 아래의 순서대로 진행하면 간단한 테스트를 할 수 있다.
1. 기본적으로 FTS(FullTextSaerch)는 비활성화 되어 있으므로 활성화 상태로 바꾼다.
exec sp_fulltext_database @action='enable'
2. FTS 카테고리를 하나 생성한다.
action 값 에는 당연하겠지만 create , drop 이 있고 더불어 stop , start_full 등이 있다. 상세한건 MSDN 참고 -_-
create , drop 은 생성, 삭제이고 stop 은 잠시 비활성화이며 start_full 은 최초 시작시 카탈로그 내에 인덱스된 내용을 채워주는 역할을 한다.
exec sp_fulltext_catalog @ftcat = 'mail_box', @action = 'create'
3. 개별 테이블에 대한 FTS 를 만든다. 아래는 mail_box 테이블에 대한 FTS 를 위에서 생성한 mail_box 카탈로그에 넣어주는 예제이다. keyname 에는 유니크한 인덱스 명이 들어가면 된다.
exec sp_fulltext_table @tabname = 'mail_box', @action = 'create', @ftcat = 'mail_box', @keyname = 'PK_MAIL_BOX'
4. FTS 를 적용할 특정 테이블의 컬럼을 지정한다. action 은 add 와 drop 이 있다.
exec sp_fulltext_column @tabname = 'mail_box', @colname ='mail_contents', @action ='add'
5. FTS 적용한 테이블에 대한 전체 텍스트 인덱스의 전체 태우기를 시작한다.
exec sp_fulltext_table @tabname = 'mail_box', @action = 'start_full'
6. 이까지 완료 되었으면 기존 데이타에 대한 FTS 는 처리가 완료되었다.
다음의 형태로 검색을 해보자.
SELECT * FROM mail_box WHERE contains(mail_contents,'검색어')
증분값에 대한 추가는 아래와 같다.
당연히 증분값에 대한 기준점이 필요해진다. 그러기 위해서 timestamp 타입의 컬럼을 추가시킨다.
--Timestamp 컬럼을 테이블에 추가.
ALTER TABLE mail_box ADD TStamp timestamp NOT NULL
GO
최초의 start_full 명령을 할 시점에 timestamp 속성 컬럼은 존재해야 한다.
그 이후에 추가되는 행들에 대한 인덱싱 추가는 아래와 같다.
--증분 파퓰레이션 시작
EXEC sp_fulltext_catalog 'mail_box', 'start_incremental'
문제는 활용도다.
형태소가 아닌 단어중 일부 문자를 입력하는 경우 fulltext 검색의 결과는 like 와 심한 차이를 보인다.
-_-
이를테면 "서생일" 을 검색할때 like 로는 "%서%" 또는 "%서생%" 등과 같이 일부를 입력한 검색에도 결과물이 잘 나타나지만
fulltext 검색의 경우 "서생일"이 아니면 결과물을 못 갖고 오거나 일부만 갖고온다.
왜 그럴까나 -_-
원래 그렇단다 -_-
가 아니고... 이게 형태소 기반의 검색 엔진인 셈인터라 like 로 생각하면 안됨..
서생일과 서생 , 생일은 파생어나 유의어 개념이 아닌터라...
CONTAINS 로 사용을 하면 색인처리된 like 검색 대용으로 활용 가능할듯..
[출처] [MS-SQL] 간단하게 Full Text Search 테스트 하기|작성자 씨콤