전체 텍스트 검색 시작Get Started with Full-Text Search

SQL Server 데이터베이스는 기본적으로 전체 텍스트를 사용하도록 설정되어 있습니다.SQL Server databases are full-text enabled by default. 하지만 전체 텍스트 쿼리를 실행하려면 먼저 전체 텍스트 카탈로그를 만들고 검색할 테이블 또는 인덱싱된 뷰에서 전체 텍스트 인덱스를 만들어야 합니다.Before you can run full-text queries, however, you must create a full text catalog and create a full-text index on the tables or indexed views you want to search.

두 단계로 전체 텍스트 검색 설정Set up full-text search in two steps

전체 텍스트 검색을 설정하는 두 가지 기본 단계는 다음과 같습니다.There are two basic steps to set up full-text search:

  1. 전체 텍스트 카탈로그를 만듭니다.Create a full-text catalog.
  2. 검색할 테이블 또는 인덱싱된 뷰에서 전체 텍스트 인덱스를 만듭니다.Create a full-text index on tables or indexed view you want to search.

각 전체 텍스트 인덱스는 전체 텍스트 카탈로그에 속해야 합니다.Each full-text index must belong to a full-text catalog. 각 전체 텍스트 인덱스에 대해 별도의 텍스트 카탈로그를 만들거나 지정된 카탈로그에 여러 전체 텍스트 인덱스를 연결할 수 있습니다.You can create a separate text catalog for each full-text index, or you can associate multiple full-text indexes with a given catalog. 전체 텍스트 카탈로그는 가상 개체이며 어떠한 파일 그룹에도 속하지 않습니다.A full-text catalog is a virtual object and does not belong to any filegroup. 이 카탈로그는 전체 텍스트 인덱스 그룹을 나타내는 논리적 개념입니다.The catalog is a logical concept that refers to a group of full-text indexes.

참고

이러한 단계는 SQL Server를 설치할 때 선택 사항인 전체 텍스트 검색 구성 요소를 설치했다는 가정 하에 진행됩니다.These steps assume that you installed the optional Full-Text Search components when you installed SQL Server. 그러지 않은 경우 SQL Server 설치 프로그램을 다시 실행하여 이 구성 요소를 설치해야 합니다.If not, you have to run SQL Server Setup again to add them.

마법사를 사용하여 전체 텍스트 검색 설정Set up full-text search with a wizard

마법사를 사용하여 전체 텍스트 검색을 설정하려면 전체 텍스트 인덱싱 마법사 사용을 참조하세요.To set up full-text search by using a wizard, see Use the Full-Text Indexing Wizard.

Transact-SQL로 전체 텍스트 검색 설정Set up full-text search with Transact-SQL

다음 두 부분으로 구성된 예제에서는 AdventureWorks 예제 데이터베이스에 AdvWksDocFTCat라는 전체 텍스트 카탈로그를 만든 다음 예제 데이터베이스의 Document 테이블에 전체 텍스트 인덱스를 만듭니다.The following two-part example creates a full-text catalog named AdvWksDocFTCat on the AdventureWorks sample database and then creates a full-text index on the Document table in the sample database. 이 문은 SQL Server를 설치할 때 지정한 기본 디렉터리에 전체 텍스트 카탈로그를 만듭니다.This statement creates the full-text catalog in the default directory specified during SQL Server setup. AdvWksDocFTCat 폴더는 기본 디렉터리에 있습니다.The folder named AdvWksDocFTCat is in the default directory.

  1. 이 예제에서는 AdvWksDocFTCat라는 전체 텍스트 카탈로그를 만들기 위해 CREATE FULLTEXT CATALOG 문을 사용합니다.To create a full-text catalog named AdvWksDocFTCat, the example uses a CREATE FULLTEXT CATALOG statement:

    USE AdventureWorks;  
    GO  
    CREATE FULLTEXT CATALOG AdvWksDocFTCat;  
    

    자세한 내용은 전체 텍스트 카탈로그 만들기 및 관리를 참조하세요.For more info, see Create and Manage Full-Text Catalogs.

  2. Document 테이블에 대한 전체 텍스트 인덱스를 만들려면 먼저 이 테이블에 Null을 허용하지 않는 고유한 단일 열 인덱스가 있는지 확인해야 합니다.Before you can create a full-text index on the Document table, ensure that the table has a unique, single-column, non-nullable index. 다음 CREATE INDEX 문에서는 Document 테이블의 DocumentID 열에 대한 고유 인덱스 ui_ukDoc를 만듭니다.The following CREATE INDEX statement creates a unique index, ui_ukDoc, on the DocumentID column of the Document table:

    CREATE UNIQUE INDEX ui_ukDoc ON Production.Document(DocumentID);  
    
  3. 고유 키를 만든 후 다음 Document CREATE FULLTEXT INDEX 문을 사용하여 테이블에 대한 전체 텍스트 인덱스를 만들 수 있습니다.After you have a unique key, you can create a full-text index on the Document table by using the following CREATE FULLTEXT INDEX statement.

    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' 열(이진 형식)의 각 행에 있는 문서 유형이 포함된 테이블의 유형 열을 지정합니다.The TYPE COLUMN defined in this example specifies the type column in the table that contains the type of the document in each row of the column 'Document' (which is of binary type). 유형 열은 지정된 행의 문서에 대한 사용자 제공 파일 확장명("doc", "xls" 등)을 저장합니다.The type column stores the user-supplied file extension - ".doc", ".xls", and so forth - of the document in a given row. 전체 텍스트 엔진은 지정된 행의 확장명을 사용하여 이러한 행의 데이터를 구문 분석하는 데 적합한 필터를 호출합니다.The Full-Text Engine uses the file extension in a given row to invoke the correct filter to use for parsing the data in that row. 필터에서 행의 이진 데이터를 구문 분석한 후 지정된 단어 분리기에서 콘텐츠를 구문 분석합니다.After the filter has parsed the binary data of the row, the specified word breaker parses the content. (이 예제에서는 영어(영국)에 대한 단어 분리기가 사용됩니다.) 자세한 내용은 고급 분석 확장 구성 및 관리를 참조하세요.(In this example, the word breaker for British English is used.) For more information, see Configure and Manage Filters for Search.

    자세한 내용은 전체 텍스트 인덱스 만들기 및 관리를 참조하세요.For more info, see Create and Manage Full-Text Indexes.

전체 텍스트 인덱스의 옵션 선택 Choose options for a full-text index

언어 선택Choose a language

열 언어 선택에 대한 자세한 내용은 전체 텍스트 인덱스 생성 시 언어 선택을 참조하세요.For information about choosing the column language, see Choose a Language When Creating a Full-Text Index.

파일 그룹 선택Choose a filegroup

전체 텍스트 인덱스를 빌드하는 프로세스에는 I/O 사용이 상당히 많습니다.The process of building a full-text index is fairly I/O intensive. 요약하면 SQL ServerSQL Server에서 데이터를 읽은 후 필터링된 데이터를 전체 텍스트 인덱스로 전파하는 작업으로 구성됩니다.In summary, it consists of reading data from SQL ServerSQL Server, and then propagating the filtered data to the full-text index. I/O 성능을 극대화하는 데 가장 적합한 데이터베이스 파일 그룹이나 다른 볼륨의 다른 파일 그룹에서 전체 텍스트 인덱스를 찾아보는 것이 가장 좋습니다.As a best practice, locate a full-text index in the database filegroup that is best for maximizing I/O performance or locate the full-text indexes in a different filegroup on another volume.

전체 텍스트 카탈로그를 선택합니다.Choose a full-text catalog

동일한 전체 텍스트 카탈로그 내에서 변경 내용이 적거나 많은 테이블 또는 특정 시간에 자주 변경되는 테이블과 같이 업데이트 특징이 동일한 테이블을 함께 연결하는 것이 좋습니다.We recommend associating tables with the same update characteristics (such as small number of changes versus large number of changes, or tables that change frequently during a particular time of day) together under the same full-text catalog. 전체 텍스트 카탈로그 채우기 일정을 세우면 전체 텍스트 인덱스는 데이터베이스 작업이 많을 때 데이터베이스 서버의 리소스 사용에 부정적인 영향을 주지 않고 테이블과 동기화 상태를 유지합니다.By setting up full-text catalog population schedules, full-text indexes stay synchronous with the tables without adversely affecting the resource usage of the database server during periods of high database activity.

다음 지침을 살펴 보십시오.Consider the following guidelines:

  • 수백 만 개의 행을 가진 테이블의 인덱스를 만들 때는 테이블을 자체의 전체 텍스트 카탈로그에 할당하세요.If you are indexing a table with millions of rows, assign the table to its own full-text catalog.

  • 전체 행 수뿐만 아니라 전체 텍스트 인덱싱되는 테이블에서 변경되는 양도 고려해야 합니다.Consider the amount of change occurring in the tables being full-text indexed, as well as the total number of rows. 변경되는 행 수와 마지막 전체 텍스트 채우기에서 나타난 테이블 행 수가 수백 만 개이면 테이블을 자체의 전체 텍스트 카탈로그에 할당하세요.If the total number of rows being changed, together with the number of rows in the table present during the last full-text population, represents millions of rows, assign the table to its own full-text catalog.

고유 인덱스 연결Associate a unique index

항상 전체 텍스트 고유 키에 사용 가능한 가장 작은 고유 인덱스를 선택하십시오.Always select the smallest unique index available for your full-text unique key. 4바이트의 정수 기반 인덱스가 적합합니다. 이렇게 하면 파일 시스템에서 MicrosoftMicrosoft Search 서비스에 필요한 리소스가 상당히 줄어듭니다.(A 4-byte, integer-based index is optimal.) This significantly reduces the resources required by MicrosoftMicrosoft Search service in the file system. 기본 키가 100바이트 이상이면 테이블에서 다른 고유 인덱스를 선택하거나 다른 고유 인덱스를 만들어 전체 텍스트 고유 키로 사용하십시오.If the primary key is large (over 100 bytes), consider choosing another unique index in the table (or creating another unique index) as the full-text unique key. 반대로 전체 텍스트 고유 키의 크기가 허용되는 최대 크기인 900바이트를 초과하면 전체 텍스트 채우기를 계속할 수 없습니다.Otherwise, if the full-text unique key size exceeds the maximum size allowed (900 bytes), full-text population will not be able to proceed.

중지 목록 연결Associate a stoplist

중지 목록 이란 의미 없는 단어라고도 하는 중지 단어의 목록입니다.A stoplist is a list of stopwords, also known as noise words. 중지 목록은 각 전체 텍스트 인덱스와 연결되며, 중지 목록의 단어는 전체 텍스트 인덱스의 전체 텍스트 쿼리에 적용됩니다.A stoplist is associated with each full-text index, and the words in that stoplist are applied to full-text queries on that index. 기본적으로 시스템 중지 목록은 새로운 전체 텍스트 인덱스와 연결됩니다.By default, the system stoplist is associated with a new full-text index. 고유한 중지 목록을 직접 만들어 사용할 수도 있습니다.You can create and use your own stoplist too.

예를 들어 다음 CREATE FULLTEXT STOPLIST Transact-SQLTransact-SQL 문에서는 시스템 중지 목록에서 전체 텍스트 중지 목록을 복사하여 myStoplist라는 새로운 전체 텍스트 중지 목록을 만듭니다.For example, the following CREATE FULLTEXT STOPLIST Transact-SQLTransact-SQL statement creates a new full-text stoplist named myStoplist by copying from the system stoplist:

CREATE FULLTEXT STOPLIST myStoplist FROM SYSTEM STOPLIST;  
GO  

다음 ALTER FULLTEXT STOPLIST Transact-SQLTransact-SQL 문에서는 myStoplist라는 중지 목록에서 먼저 스페인어에 단어 'en'을 추가한 다음 프랑스어에 단어 'en'을 추가하여 중지 목록을 변경합니다.The following ALTER FULLTEXT STOPLIST Transact-SQLTransact-SQL statement alters a stoplist named myStoplist, adding the word 'en', first for Spanish and then for French:

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

자세한 내용은 전체 텍스트 검색에 사용할 중지 단어와 중지 목록 구성 및 관리를 참조하세요.For more information, see Configure and Manage Stopwords and Stoplists for Full-Text Search.

전체 텍스트 인덱스 업데이트Update a full-text index

일반 SQL ServerSQL Server 인덱스처럼 전체 텍스트 인덱스는 연결된 테이블의 데이터가 수정될 때 자동으로 업데이트할 수 있습니다.Like regular SQL ServerSQL Server indexes, full-text indexes can be automatically updated as data is modified in the associated tables. 이것이 기본 동작입니다.This is the default behavior. 또는 전체 텍스트 인덱스를 수동으로 업데이트하거나 예약된 간격으로 업데이트할 수 있습니다.Alternatively, you can keep your full-text indexes up-to-date manually, or at specified scheduled intervals. 전체 텍스트 인덱스를 채우는 작업은 시간이 오래 걸리고 리소스가 많이 사용될 수 있습니다.Populating a full-text index can be time-consuming and resource-intensive. 따라서 인덱스 업데이트는 일반적으로 백그라운드로 실행되는 비동기 프로세스로 수행되며 기본 테이블을 수정한 다음 전체 텍스트 인덱스를 최신 상태로 유지합니다.Therefore, index updating is usually performed as an asynchronous process that runs in the background and keeps the full-text index up to date after modifications in the base table.

기본 테이블을 변경할 때마다 전체 텍스트 인덱스를 업데이트하면 리소스 사용량도 많아집니다.Updating a full-text index immediately after each change in the base table is also resource-intensive. 따라서 업데이트/삽입/삭제 빈도가 높을 경우 쿼리 성능이 약간 저하될 수 있습니다.Therefore, if you have a high update/insert/delete rate, you may experience some degradation in query performance. 이러한 경우에는 리소스 때문에 쿼리 실행에 차질을 빚기보다는 일정한 간격을 두고 여러 변경 내용을 한꺼번에 추적하여 텍스트 인덱스를 업데이트하도록 수동으로 변경 내용 추적 업데이트 일정을 세우는 것이 좋습니다.If this occurs, consider scheduling manual change tracking updates to keep up with the numerous changes from time to time, rather than competing with queries for resources.

자세한 내용은 전체 텍스트 인덱스 채우기를 참조하세요.For more info, see Populate Full-Text Indexes.

다음 단계Next steps

SQL Server 전체 텍스트 검색을 설정했으면 전체 텍스트 쿼리를 실행할 준비가 된 것입니다.After you set up SQL Server Full-Text Search, you're ready to run full-text queries. 자세한 내용은 전체 텍스트 검색을 사용한 쿼리를 참조하세요.For more info, see Query with Full-Text Search.