Full text Search (전문검색) 을 구현하려면 우선 이론적으로 알아야하고, 관리방법도 익혀야하며 효율적으로 명령을 내려야 운영 DB에 이상없이 적용이 되고, 운용 DB의 Schema가 바뀌는 상황이 생겨도 재빠른 대처를 할 수 있다. 


명령어들을 나열했고 추가적으로 업데이트를 할 생각이에요. 보시고 부족한 부분 있으면 댓글로 남겨주시면 참고하겠습니다.^^


FULL TEXT SEARCH 개발 순서

1. Create a full-text catalog, if necessary.

2. Create the full-text index.

3. Modify the list of noise words (SQL Server 2005) or stop words (SQL Server 2008), if necessary.

4. Modify the thesaurus for the language being used, if necessary.


1. FULL-TEXT Catalog 생성

CREATE FULLTEXT CATALOG [CataLogName] AS DEFAULT;


1.1 Catalog 확인

SELECT * FROM sys.FullText_Catalogs


2.  FULL-TEXT INDEX 생성

2.1)CREATE FULLTEXT INDEX ON [테이블]

([필드], [필드] LANGUAGE 1042)

KEY INDEX [인덱스 키]

ON [카탈로그 명]

WITH STOPLIST = SYSTEM

2.2))CREATE FULLTEXT INDEX [INDEXKEYNAME] ON[테이블]([필드]); 

  CREATE FULLTEXT INDEX ON  [테이블]([필드]) KEY INDEX [INDEXKEYNAME] ON [Catalog];


3. index 생성 시 language 설정하기 위해 리스트 보기.

SELECT * FROM sys.fulltext_languages

ORDER BY lcid

[Korea 1042]


3. Start population

ALTER FULLTEXT INDEX ON SalesLT.ProductDescription ENABLE; 

GO 

ALTER FULLTEXT INDEX ON SalesLT.ProductCategory START FULL POPULATION;


4. Monitor full-text search 활성화

SELECT * FROM sys.dm_fts_index_population


5. 채우기 상태 모니터링

SELECT FULLTEXTCATALOGPROPERTY('ftCatalog', 'SalesLT.ProductCategory');


6. 인덱스 내용 정보 반환

SELECT * FROM sys.dm_fts_index_keywords( DB_ID('AdventureWorksLT'), OBJECT_ID('SalesLT.ProductCategory'))


7. CONTAINSTABLE 가중치(RANK) 이용해서 각 단어에 따른 RANK가 지정되어 등급별로 행을 반황할 수 있다.

SELECT * FROM CONTAINSTABLE ( [SalesLT].[ProductCategory], Name, 'ISABOUT (그노 WEIGHT (.8), 

그노 WEIGHT (.4), 그 WEIGHT (.2) )' )


8. CONTAINS특정 키워드를 이용해 전문검색 카탈로그를 검색합니다. 

SELECT  *

FROM [SalesLT].[ProductCategory]

WHERE CONTAINS(Name,'그노')   


9. FREETEXT 자유 검색

SELECT * FROM [SalesLT].[ProductCategory] WHERE FREETEXT(Name,N'그노1')  


10. Catalog 확인

SELECT * FROM sys.FullText_Catalogs  


11. FullText Index 확인

EXEC SP_HELP_FULLTEXT_Tables  


12. INDEX 삭제하기

DROP FULLTEXT INDEX ON [테이블명]


13. 카탈로그 삭제하기

DROP FULLTEXT CATALOG [카탈로그명]  


14. 증분 파풀레이션

EXEC sp_fulltext_catalog 'ftCatalog','start_incremental'


15. 풀 파풀레이션 

EXEC sp_fulltext_catalog 'ftCatalog','start_full'


16. STOPLIST 생성하기

CREATE FULLTEXT STOPLIST ProductSL

FROM SYSTEM STOPLIST;


17. STOPLIST 조회하기

SELECT stoplist_id, name FROM sys.fulltext_stoplists


18. STOPLIST 추가하기

ALTER FULLTEXT STOPLIST ProductSL

ADD '?????' LANGUAGE 1042;


19. STOPLIST 리스트 조회하기

SELECT stopword FROM sys.fulltext_stopwords

WHERE stoplist_id = 5 AND language_id = 1042


20. STOPLIST 테스트하기

SELECT special_term, display_term

FROM sys.dm_fts_parser

  (' "testing for ? ?? ????? fruit and nuts, any type of nut" ', 1042, 5, 0)


21. STOPLIST 적용하기

ALTER FULLTEXT INDEX ON ProductDocs

SET STOPLIST ProductSL


22. 테이블에 timestamp 컬럼 추가

ALTER TABLE [테이블명] ADD [컬럼명] timestamp not null




------------------------------------------------------------------

CREATE FULLTEXT INDEX ON Place

(Name, Address LANGUAGE 1042)

KEY INDEX PK_Place

ON PlaceFTS

WITH CHANGE_TRACKING AUTO


use MOCCOZYDATABASE

GO

CREATE FULLTEXT CATALOG PlaceFTS

WITH ACCENT_SENSITIVITY = OFF


SELECT t.name AS TableName, c.name AS FTCatalogName

FROM sys.tables t JOIN sys.fulltext_indexes i

  ON t.object_id = i.object_id

JOIN sys.fulltext_catalogs c

  ON i.fulltext_catalog_id = c.fulltext_catalog_id



  SELECT display_term, column_id, document_count
FROM sys.dm_fts_index_keywords
  (DB_ID('MOCCOZYDATABASE'), OBJECT_ID('Place'))

----------------------------------------------------------------------

Posted by Hoya0415
,