Click or drag to resize

Full-Text 검색 적용 방법

메일 본문과 같은 텍스트 데이터를 검색하는 방법은 크게 두 가지가 있습니다. 첫 번째는 SQL LIKE 검색으로 모든 텍스트를 스캔하면서 검색 키워드가 존재하는지 검사하는 방법입니다. 별도의 추가 작업 없이 간단하게 처리할 수 있으므로 일반적으로 널리 사용됩니다. 메일캐리어 웹메일 역시 기본적으로 이 방식을 사용합니다. 특성상 검색할 텍스트 데이터가 많아지면 그 크기에 비례해 검색 속도가 느려지는 문제가 있습니다.

두 번째 방법은 Full-Text 검색 기능을 사용하는 것입니다. 일반적으로 인터넷 검색 엔진들이 사용하는 방식으로 텍스트 데이터에서 미리 키워드를 추출해 인덱스를 구성하며 검색시는 이 인덱스를 조회해 빠르게 검색하는 방식입니다. MSSQL 서버에는 Full-Text 검색 기능이 포함되어 있고 메일캐리어 웹메일 역시 지원하고 있습니다.

Full-Text 검색 인덱스 생성

메일캐리어 Full-Text 검색 기능을 사용하기 위해서는 해당 데이터베이스가 Full-Text 검색 기능을 지원하고 있는지 먼저 확인해야 합니다.

MSSQL Management Studio를 실행시켜 메일캐리어 데이터베이스에 연결한 후 다음 쿼리를 실행합니다. 결과 값이 1이 나온다면 해당 기능이 설치되어 있는 것입니다. 0이 나온다면 MSSQL 설치 프로그램을 실행시켜 Full-Text 검색 기능을 추가로 설치해야 합니다.

SQL
SELECT FULLTEXTSERVICEPROPERTY('IsFullTextInstalled')

메시지 저장 테이블과 게시판 글 저장 테이블, 결재 문서 테이블의 검색 필드에 대해 Full-Text 인덱스를 생성합니다. 인덱스를 생성할 메시지 또는 게시글 수가 많다면 인덱스를 생성하는데 시간이 걸리며 데이터베이스 서버의 CPU 사용 및 디스크 I/O가 증가하게 됩니다. 데이터가 많고 처음 인덱스를 생성하는 경우라면 사용량이 적은 시간에 인덱스를 생성하십시오.

SQL
CREATE FULLTEXT CATALOG MailCarrierCatalog
GO

CREATE FULLTEXT INDEX ON dbo.McMailboxMsg
        (mm_searchText)
        KEY INDEX PK_McMailBoxMsg ON MailCarrierCatalog
        WITH CHANGE_TRACKING AUTO
GO

CREATE FULLTEXT INDEX ON dbo.McBoardThread
        (bt_searchText)
        KEY INDEX PK_McBoardThread ON MailCarrierCatalog
        WITH CHANGE_TRACKING AUTO
GO

CREATE FULLTEXT INDEX ON dbo.ApvDocument
        (apd_searchText)
        KEY INDEX PK_ApvDocument ON MailCarrierCatalog
        WITH CHANGE_TRACKING AUTO
GO
게시글 데이터 준비

게시판에 저장되어 있는 게시글 데이터는 Full-text 소스로 사용하기에 부적합하므로 추가적인 명령을 실행할 필요가 있습니다. 명령 프롬프트를 열어 메일캐리어 설치 폴더/Tools에 있는 etctools.exe 프로그램을 아래와 같이 실행합니다.

명령 프롬프트
C:\Program Files\TABS\MailCarrier\7.0\Tools>etctools.exe buildboardsearchtext
메일캐리어 웹메일 변경

메일캐리어 웹메일은 두 가지 검색 방법을 모두 지원하고 있습니다. 웹메일 Web.config 파일에서 UseFulltextSearch 값을 true로 지정하면 LIKE 검색 대신 Full-Text 검색을 시도하게 됩니다.

Web.config
<add key="UseFulltextSearch" value="true" />
Full-Text 검색 단점

추가되는 메일/게시글/결재 데이터에 대해 지속적으로 인덱스가 생성되므로 MSSQL 서버 부하가 일정 부분 늘어나게 됩니다.

Full-Text 인덱스를 저장하기 위해 추가적인 디스크 저장 공간을 필요로 합니다.

Full-Text 검색 기능 제거

웹메일 Web.config 파일에서 UseFulltextSearch 값을 false로 지정합니다.

아래 쿼리를 실행해 생성된 인덱스를 제거합니다.

SQL
DROP FULLTEXT INDEX ON dbo.McMailboxMsg
GO

DROP FULLTEXT INDEX ON dbo.McBoardThread
GO

DROP FULLTEXT INDEX ON dbo.ApvDocument
GO

DROP FULLTEXT CATALOG MailCarrierCatalog
GO