다음을 통해 공유


전체 텍스트 검색 시작

적용 대상: SQL Server Azure SQL Database Azure SQL Managed Instance

SQL Server 데이터베이스는 기본적으로 전체 텍스트를 사용하도록 설정되어 있습니다. 그러나 전체 텍스트 쿼리를 실행하려면 먼저 전체 텍스트 카탈로그를 만들고 검색하려는 테이블 또는 인덱싱된 뷰에 전체 텍스트 인덱스를 만들어야 합니다.

두 단계로 전체 텍스트 검색 설정

전체 텍스트 검색을 설정하는 두 가지 기본 단계는 다음과 같습니다.

  1. 전체 텍스트 카탈로그를 만듭니다.
  2. 검색하려는 테이블 또는 인덱싱된 뷰에서 전체 텍스트 인덱스를 만듭니다.

각 전체 텍스트 인덱스는 전체 텍스트 카탈로그에 속해야 합니다. 각 전체 텍스트 인덱스에 대해 별도의 텍스트 카탈로그를 만들거나 여러 전체 텍스트 인덱스를 지정된 카탈로그와 연결할 수 있습니다. 전체 텍스트 카탈로그는 가상 개체이며 어떠한 파일 그룹에도 속하지 않습니다. 이 카탈로그는 전체 텍스트 인덱스 그룹을 나타내는 논리적 개념입니다.

참고 항목

이 단계에서는 SQL Server를 설치할 때 선택적 전체 텍스트 검색 구성 요소를 설치했다고 가정합니다. 그렇지 않은 경우 SQL Server 설치 프로그램을 다시 실행하여 추가해야 합니다.

마법사를 사용하여 전체 텍스트 검색 설정

마법사를 사용하여 전체 텍스트 검색을 설정하려면 전체 텍스트 인덱싱 마법사 사용을 참조하세요.

Transact-SQL로 전체 텍스트 검색 설정

다음 두 부분으로 구성된 예제에서는 AdventureWorks 샘플 데이터베이스에 AdvWksDocFTCat로 명명된 전체 텍스트 카탈로그를 만든 다음 샘플 데이터베이스의 Document 테이블에 전체 텍스트 인덱스를 만듭니다. 이 문은 SQL Server 설치 중에 지정된 기본 디렉터리에 전체 텍스트 카탈로그를 만듭니다. 명명된 AdvWksDocFTCat 폴더는 기본 디렉터리에 있습니다.

  1. 이 예제에서는 AdvWksDocFTCat라는 전체 텍스트 카탈로그를 만들기 위해 CREATE FULLTEXT CATALOG 문을 사용합니다.

    USE AdventureWorks;  
    GO  
    CREATE FULLTEXT CATALOG AdvWksDocFTCat;  
    

    자세한 내용은 전체 텍스트 카탈로그 만들기 및 관리를 참조하세요.

  2. Document 테이블에서 전체 텍스트 인덱스를 만들기 전에 테이블에 Null을 허용하지 않는 고유한 단일 열 인덱스가 있는지 확인합니다. 다음 CREATE INDEX 문은 Document 테이블의 DocumentID 열에 고유 인덱스인 ui_ukDoc를 생성합니다.

    CREATE UNIQUE INDEX ui_ukDoc ON Production.Document(DocumentNode);  
    
  3. 다음 DROP FULLTEXT INDEX 문을 사용하여 Document 테이블에 기존 전체 텍스트 인덱스 삭제

    DROP FULLTEXT INDEX ON Production.Document
    GO
    
  4. 고유한 키가 있으면 다음 CREATE FULLTEXT INDEX 문을 사용하여 Document 테이블에 전체 텍스트 인덱스 만들기를 수행할 수 있습니다.

    CREATE FULLTEXT INDEX ON Production.Document  
    (  
        Document                         --Full-text index column name   
            TYPE COLUMN FileExtension    --Name of column that contains file type information  
            Language 2057                 --2057 is the LCID for British English  
    )  
    KEY INDEX ui_ukDoc ON AdvWksDocFTCat --Unique index  
    WITH CHANGE_TRACKING AUTO            --Population type;  
    GO  
    
    

    이 예제에 정의된 TYPE COLUMN은 'Document' 열의 각 행에 있는 문서 형식(이진 형식)이 포함된 테이블의 형식 열을 지정합니다. 형식 열은 사용자가 제공한 파일 확장명입니다(".doc", ".xls" 등)를 지정된 행에 저장합니다. 전체 텍스트 엔진은 지정된 행의 파일 확장자를 사용하여 해당 행의 데이터를 구문 분석하는 데 사용할 올바른 필터를 호출합니다. 필터에서 행의 이진 데이터를 구문 분석한 후 지정된 단어 분리기에서 콘텐츠를 구문 분석합니다. (이 예제에서는 영국 영어의 단어 분리기가 사용됩니다.) 자세한 내용은 검색용 필터 구성 및 관리를 참조하세요.

    자세한 내용은 전체 텍스트 인덱스 만들기 및 관리를 참조하세요.

전체 텍스트 인덱스 옵션 선택

언어 선택

열 언어를 선택하는 방법에 대한 자세한 내용은 전체 텍스트 인덱스 만들기할 때 언어 선택을 참조하세요.

파일 그룹 선택

전체 텍스트 인덱스 작성 프로세스는 상당히 I/O 집약적입니다. 요약하면 SQL Server에서 데이터를 읽은 다음 필터링된 데이터를 전체 텍스트 인덱스로 전파하는 것으로 구성됩니다. I/O 성능을 극대화하는 데 가장 적합한 데이터베이스 파일 그룹이나 다른 볼륨의 다른 파일 그룹에서 전체 텍스트 인덱스를 찾아보는 것이 가장 좋습니다.

전체 텍스트 카탈로그를 선택합니다.

동일한 전체 텍스트 카탈로그 아래에 동일한 업데이트 특성(예: 적은 수의 변경 내용과 많은 변경 내용 또는 특정 시간 동안 자주 변경되는 테이블)을 함께 연결하는 것이 좋습니다. 전체 텍스트 카탈로그 채우기 일정을 설정하면 전체 텍스트 인덱스가 높은 데이터베이스 작업 기간 동안 데이터베이스 서버의 리소스 사용량에 부정적인 영향을 주지 않고 테이블과 동기적으로 유지됩니다.

다음 지침을 고려하세요.

  • 수백만 개의 행이 있는 테이블을 인덱싱하는 경우 테이블을 자체 전체 텍스트 카탈로그에 할당합니다.

  • 전체 텍스트 인덱싱되는 테이블에서 발생하는 변경량과 총 행 수를 고려합니다. 변경되는 행의 총 수와 마지막 전체 텍스트 채우기 동안 테이블의 행 수와 함께 수백만 개의 행을 나타내는 경우 테이블을 자체 전체 텍스트 카탈로그에 할당합니다.

고유 인덱스 연결하기

항상 전체 텍스트 고유 키에 사용할 수 있는 가장 작은 고유 인덱스 선택 (4 바이트 정수 기반 인덱스가 최적입니다.) 이렇게 하면 파일 시스템에서 Microsoft Search 서비스에 필요한 리소스를 크게 줄어듭니다. 기본 키가 큰 경우(100바이트 초과) 테이블에서 다른 고유 인덱스(또는 다른 고유 인덱스 만들기)를 전체 텍스트 고유 키로 선택하는 것이 좋습니다. 그렇지 않은 경우 전체 텍스트 고유 키 크기가 허용되는 최대 크기(900바이트)를 초과하면 전체 텍스트 채우기를 진행할 수 없습니다.

중지 목록 연결하기

중지 목록 이란 의미 없는 단어라고도 하는 중지 단어의 목록입니다. 중지 목록은 각 전체 텍스트 인덱스와 연결되며, 중지 목록의 단어는 전체 텍스트 인덱스의 전체 텍스트 쿼리에 적용됩니다. 기본적으로 시스템 차단 목록은 새로운 전체 텍스트 인덱스와 연결됩니다. 사용자만의 중지 목록을 만들고 사용할 수도 있습니다.

예를 들어 다음 CREATE FULLTEXT STOPLIST Transact-SQL 문은 시스템 중지 목록에서 복사하여 myStoplist라는 새 전체 텍스트 중지 목록을 만듭니다.

CREATE FULLTEXT STOPLIST myStoplist FROM SYSTEM STOPLIST;  
GO  

다음 ALTER FULLTEXT STOPLIST Transact-SQL 문에서는 myStoplist라는 중지 목록에서 먼저 스페인어에 단어 'en'을 추가한 다음 프랑스어에 단어 'en'을 추가하여 중지 목록을 변경합니다.

ALTER FULLTEXT STOPLIST myStoplist ADD 'en' LANGUAGE 'Spanish';  
ALTER FULLTEXT STOPLIST myStoplist ADD 'en' LANGUAGE 'French';  
GO  

자세한 내용은 전체 텍스트 검색에 사용할 중지 단어와 중지 목록 구성 및 관리를 참조하세요.

전체 텍스트 인덱스 업데이트

일반 SQL Server 인덱스와 마찬가지로 연결된 테이블에서 데이터가 수정될 때 전체 텍스트 인덱스를 자동으로 업데이트할 수 있습니다. 이 옵션은 기본 동작입니다. 또는 전체 텍스트 인덱스를 수동으로 또는 지정된 예약된 간격으로 최신 상태로 유지할 수 있습니다. 전체 텍스트 인덱스를 채우는 것은 시간이 많이 걸리고 리소스를 많이 사용할 수 있습니다. 그러므로 인덱스 업데이트는 일반적으로 백그라운드에서 실행되는 비동기 프로세스로 수행되며 기본 테이블을 수정한 다음 전체 텍스트를 업데이트합니다.

기본 테이블이 변경될 때마다 전체 텍스트 인덱스를 즉시 업데이트하는 작업도 리소스 집약적입니다. 따라서 업데이트/삽입/삭제 속도가 높은 경우 쿼리 성능이 약간 저하되었을 수 있습니다. 이러한 경우에는 리소스 때문에 쿼리 실행에 차질을 빚기보다는 일정한 간격을 두고 여러 변경 내용을 한꺼번에 추적하여 텍스트 인덱스를 업데이트하도록 수동으로 변경 내용 추적 업데이트 일정을 세우는 것이 좋습니다.

자세한 내용은 전체 텍스트 인덱스 채우기를 참조하세요.

다음 단계

SQL Server 전체 텍스트 검색을 설정한 후에는 전체 텍스트 쿼리를 실행할 준비가 된 것입니다. 자세한 내용은 전체 텍스트 검색을 사용한 쿼리를 참조하세요.