다음을 통해 공유


ALTER FULLTEXT INDEX(Transact-SQL)

적용 대상: SQL Server Azure SQL 데이터베이스 Azure SQL Managed Instance

SQL Server에서 전체 텍스트 인덱스의 속성을 변경합니다.

Transact-SQL 구문 표기 규칙

구문

ALTER FULLTEXT INDEX ON table_name
   { ENABLE
   | DISABLE
   | SET CHANGE_TRACKING [ = ] { MANUAL | AUTO | OFF }
   | ADD ( column_name
           [ TYPE COLUMN type_column_name ]
           [ LANGUAGE language_term ]
           [ STATISTICAL_SEMANTICS ]
           [ , ...n ]
         )
     [ WITH NO POPULATION ]
   | ALTER COLUMN column_name
     { ADD | DROP } STATISTICAL_SEMANTICS
     [ WITH NO POPULATION ]
   | DROP ( column_name [ , ...n ] )
     [ WITH NO POPULATION ]
   | START { FULL | INCREMENTAL | UPDATE } POPULATION
   | { STOP | PAUSE | RESUME } POPULATION
   | SET STOPLIST [ = ] { OFF | SYSTEM | stoplist_name }
     [ WITH NO POPULATION ]
   | SET SEARCH PROPERTY LIST [ = ] { OFF | property_list_name }
     [ WITH NO POPULATION ]
   }
[ ; ]

인수

table_name

전체 텍스트 인덱스에 포함된 열 또는 열을 포함하는 테이블 또는 인덱싱된 뷰의 이름입니다. 선택적으로 데이터베이스 및 테이블 소유자 이름을 지정할 수 있습니다.

ENABLE | DISABLE

table_name에 대한 전체 텍스트 인덱스 데이터를 수집할지 여부를 SQL Server에 알립니다. ENABLE은 전체 텍스트 인덱스를 활성화하고, DISABLE은 전체 텍스트 인덱스를 비활성화합니다. 인덱스를 사용할 수 없는 동안에는 테이블이 전체 텍스트 쿼리를 지원하지 않습니다.

전체 텍스트 인덱스를 비활성화하면 변경 내용 추적 기능을 해제할 수 있지만 전체 텍스트 인덱스는 유지할 수 있으므로 ENABLE을 사용하여 언제든지 다시 활성화할 수 있습니다. 전체 텍스트 인덱스를 비활성화해도 전체 텍스트 인덱스 메타데이터는 시스템 테이블에 유지됩니다. 전체 텍스트 인덱스를 사용하지 않도록 설정할 때 CHANGE_TRACKING 사용 상태(자동 또는 수동 업데이트)인 경우 인덱스의 상태가 중지되고, 진행 중인 크롤링이 중지되고, 테이블 데이터의 새 변경 내용이 추적되거나 인덱스에 전파되지 않습니다.

SET CHANGE_TRACKING { MANUAL | AUTO | OFF }

SQL Server에서 전체 텍스트 인덱스가 적용되는 테이블 열의 변경 내용(업데이트, 삭제 또는 삽입)을 해당 전체 텍스트 인덱스로 전파할지 여부를 지정합니다. WRITETEXT 및 UPDATETEXT를 통한 데이터 변경 내용은 전체 텍스트 인덱스로 반영되지 않으며 변경 내용 추적으로 선택되지 않습니다.

참고 항목

자세한 내용은 변경 내용 추적과 NO POPULATION 매개 변수 간의 상호 작용을 참조하세요.

  • MANUAL

    ALTER FULLTEXT INDEX ...를 호출하여 추적된 변경 내용이 수동으로 전파되도록 지정합니다. START UPDATE POPULATION Transact-SQL 문(수동 채우기). SQL Server 에이전트를 사용하여 이 Transact-SQL 문을 주기적으로 호출할 수 있습니다.

  • AUTO

    데이터가 기본 테이블(자동 채우기)에서 수정될 때 추적된 변경 내용이 자동으로 전파되도록 지정합니다. 변경 내용은 자동으로 전파되지만 전체 텍스트 인덱스에 즉시 반영되지 않을 수 있습니다. 기본값은 AUTO입니다.

  • OFF

    SQL Server가 인덱싱된 데이터에 대한 변경 내용 목록을 유지하지 않도록 지정합니다.

ADD | DROP column_name

전체 텍스트 인덱스에서 추가하거나 삭제할 열을 지정합니다. 열은 char, varchar, nchar, nvarchar, text, ntext, image, xml, varbinary 또는 varbinary(max) 형식이어야 합니다.

이전에 전체 텍스트 인덱싱을 위해 활성화된 열에서만 DROP 절을 사용하십시오.

ADD 절에서 TYPE COLUMN 및 LANGUAGE를 사용하여 column_name에서 이러한 속성을 설정할 수 있습니다. 열이 추가되면 이 열에 대해 전체 텍스트 쿼리가 실행되도록 테이블의 전체 텍스트 인덱스를 다시 채워야 합니다.

참고

전체 텍스트 인덱스에서 열을 추가하거나 삭제한 후 전체 텍스트 인덱스가 채워지는지 여부는 변경 내용 추적이 설정되어 있는지 여부와 WITH NO POPULATION이 지정되어 있는지 여부에 따라 달라집니다. 자세한 내용은 변경 내용 추적과 NO POPULATION 매개 변수 간의 상호 작용을 참조하세요.

TYPE COLUMN type_column_name

varbinary, varbinary(max) 또는 이미지 문서에 대한 문서 형식을 보유하는 데 사용되는 테이블 열 type_column_name 이름을 지정합니다. 형식 열이라고 하는 이 열에는 사용자가 제공한 파일 확장명(.doc, .pdf.xls)이 포함됩니다. 형식 열은 char, nchar, varchar또는 nvarchar형식이어야 합니다.

형식 열 type_column_namecolumn_namevarbinary, varbinary(max) 또는 image 열을 지정하여 데이터가 이진 데이터로 저장되는 경우에만 지정합니다. 그렇지 않으면 SQL Server에서 오류가 반환됩니다.

참고

인덱싱할 때 전체 텍스트 엔진은 각 테이블 행의 유형 열에 있는 약어를 사용하여 column_name의 문서에 사용할 전체 텍스트 검색 필터를 식별합니다. 이 필터는 문서를 이진 스트림으로 로드하고 서식 정보를 제거하며 문서의 텍스트를 단어 분리기 구성 요소로 보냅니다. 자세한 내용은 고급 분석 확장 구성 및 관리를 참조하세요.

LANGUAGE language_term

column_name 저장된 데이터의 언어입니다.

language_term은 선택적이며 언어의 LCID(로캘 ID)에 해당하는 문자열, 정수 또는 16진수 값으로 지정할 수 있습니다. language_term을 지정할 경우 해당 언어는 검색 조건의 모든 요소에 적용됩니다. 값이 지정되지 않으면 SQL Server 인스턴스의 기본 전체 텍스트 언어가 사용됩니다.

저장 프로시저를 sp_configure 사용하여 SQL Server 인스턴스의 기본 전체 텍스트 언어에 대한 정보에 액세스합니다.

문자열 로 지정하면 language_term 시스템 테이블의 alias 열 값에 sys.syslanguages 해당합니다. 문자열은 'language_term'과 같이 작은따옴표로 묶어야 합니다. 정수로 지정하는 경우 language_term은 언어를 식별하는 실제 LCID입니다. 16진수 값으로 지정하는 경우 language_term은 0x로 시작하는 16진수 LCID 값입니다. 16진수 값은 선행 0을 포함하여 8자리 수를 초과할 수 없습니다.

값이 DBCS(더블바이트 문자 집합) 형식인 경우 SQL Server에서는 값을 유니코드로 변환합니다.

단어 분리기 및 형태소 분석기와 같은 리소스는 language_term으로 지정된 언어에 사용해야 합니다. 이러한 리소스가 지정된 언어를 지원하지 않으면 SQL Server에서 오류를 반환합니다.

비 BLOB 및 비 XML 열이 여러 언어로 된 텍스트 데이터를 포함하거나 열에 저장된 텍스트의 언어를 알 수 없는 경우 중립(0x0) 언어 리소스를 사용합니다. XML 또는 BLOB 형식 열에 저장된 문서의 경우 인덱싱 시 문서 내의 언어 인코딩이 사용됩니다. 예를 들어 XML 열 xml:lang 에서 XML 문서의 특성은 언어를 식별합니다. 쿼리할 때 language_term이 전체 텍스트 쿼리의 일부로 지정되지 않은 경우에는 language_term에 지정된 이전 값이 전체 텍스트 쿼리의 기본 언어로 사용됩니다.

STATISTICAL_SEMANTICS

적용 대상: SQL Server 2012(11.x) 이상 버전.

통계 의미 체계 인덱싱의 일부인 추가 키 구 및 문서 유사성 인덱스를 만듭니다. 자세한 내용은 의미 체계 검색(SQL Server)을 참조하세요.

[ , ...n ]

ADD, ALTER 또는 DROP 절에 대해 여러 열을 지정할 수 있음을 나타냅니다. 여러 열을 지정하는 경우 각 열을 쉼표로 구분하십시오.

WITH NO POPULATION

ADD 또는 DROP 열 작업 또는 SET STOPLIST 작업 후에 전체 텍스트 인덱스가 채워지지 않도록 지정합니다. 사용자가 START를 실행하는 경우에만 인덱스가 채워집니다... POPULATION 명령입니다.

NO POPULATION을 지정하면 SQL Server는 인덱스를 채웁트하지 않습니다. 인덱스는 사용자가 ALTER FULLTEXT INDEX...START POPULATION 명령을 제공하는 경우에만 채워집니다. NO POPULATION을 지정하지 않으면 SQL Server에서 인덱스를 채웁니다.

CHANGE_TRACKING을 활성화하고 WITH NO POPULATION을 지정하면 SQL Server에서 오류를 반환합니다. CHANGE_TRACKING 사용하도록 설정되어 있고 WITH NO POPULATION이 지정되지 않은 경우 SQL Server는 인덱스에 대한 전체 채우기를 수행합니다.

참고 항목

자세한 내용은 변경 내용 추적과 NO POPULATION 매개 변수 간의 상호 작용을 참조하세요.

{ADD | DROP } STATISTICAL_SEMANTICS

적용 대상: SQL Server 2012(11.x) 이상 버전.

지정된 열에 대해 통계 의미 체계 인덱싱을 사용하거나 사용하지 않도록 설정합니다. 자세한 내용은 의미 체계 검색(SQL Server)을 참조하세요.

START { FULL | 증분 | UPDATE } POPULATION

table_name의 전체 텍스트 인덱스 채우기를 시작하도록 SQL Server에 알립니다. 전체 텍스트 인덱스 채우기가 이미 진행 중인 경우 SQL Server는 경고를 반환하고 새 채우기를 시작하지 않습니다.

  • FULL

    행이 이미 인덱싱된 경우에도 전체 텍스트 인덱싱을 위해 테이블의 모든 행이 검색되도록 지정합니다.

  • INCREMENTAL

    전체 텍스트 인덱싱을 위해 마지막 채우기 이후 수정된 행만 검색되도록 지정합니다. INCREMENTAL은 테이블에 timestamp형식의 열이 있는 경우에만 적용할 수 있습니다. 전체 텍스트 카탈로그의 테이블에 타임스탬프 형식의 열이 없으면 테이블은 전체 채우기를 거칩니다.

  • UPDATE

    변경 내용 추적 인덱스가 마지막으로 업데이트된 후에 모든 삽입, 업데이트 또는 삭제를 처리하도록 지정합니다. 테이블에서 변경 내용 추적 채우기를 사용하도록 설정해야 하지만 백그라운드 업데이트 인덱스 또는 자동 변경 내용 추적을 켜면 안 됩니다.

{STOP | PAUSE | RESUME } POPULATION

진행 중인 채우기를 중지 또는 일시 중지하거나, 일시 중지된 채우기를 중지 또는 다시 시작합니다.

STOP POPULATION은 자동 변경 내용 추적 또는 백그라운드 업데이트 인덱스가 중지되지 않습니다. 변경 내용 추적을 중지하려면 SET CHANGE_TRACKING OFF를 사용합니다.

PAUSE POPULATION 및 RESUME POPULATION은 전체 채우기에만 사용할 수 있습니다. 다른 모집단은 크롤링이 중지된 위치에서 크롤링을 다시 시작하기 때문에 다른 모집단 유형과 관련이 없습니다.

SET STOPLIST { OFF | SYSTEM | stoplist_name }

인덱스와 연결된 전체 텍스트 중지 목록을 변경합니다.

  • OFF

    중지 목록이 전체 텍스트 인덱스와 연결되지 않도록 지정합니다.

  • SYSTEM

    기본 전체 텍스트 시스템 STOPLIST가 이 전체 텍스트 인덱스에 사용되도록 지정합니다.

  • stoplist_name

    전체 텍스트 인덱스와 연결할 중지 목록의 이름을 지정합니다.

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

SET SEARCH PROPERTY LIST { OFF | property_list_name } [ WITH NO POPULATION ]

적용 대상: SQL Server 2012(11.x) 이상 버전.

인덱스와 연결된 검색 속성 목록을 변경합니다(있을 경우).

  • OFF

    속성 목록이 전체 텍스트 인덱스와 연결되지 않음을 지정합니다. 전체 텍스트 인덱스(ALTER FULLTEXT INDEX ... SET SEARCH PROPERTY LIST OFF)의 검색 속성 목록을 해제하면 기본 테이블에서 속성을 검색할 수 없습니다.

    기본적으로 기존의 검색 속성 목록을 해제할 경우 전체 텍스트 인덱스가 자동으로 다시 채워집니다. 검색 속성 목록을 끌 때 WITH NO POPULATION을 지정하면 자동 다시 채워지지 않습니다. 그러나 나중에라도 사용자의 편의를 위해 이 전체 텍스트 인덱스에 대해 전체 채우기를 실행하는 것이 좋습니다. 전체 텍스트 인덱스를 다시 채우면 삭제된 각 검색 속성의 속성별 메타데이터가 제거되어 전체 텍스트 인덱스 크기가 줄어들고 효율성이 높아집니다.

  • property_list_name

    전체 텍스트 인덱스와 연결할 검색 속성 목록의 이름을 지정합니다.

    검색 속성 목록을 전체 텍스트 인덱스에 추가하려면 연결된 검색 속성 목록에 등록된 검색 속성을 인덱싱하기 위해 인덱스를 다시 채워야 합니다. 검색 속성 목록을 추가할 때 WITH NO POPULATION을 지정하는 경우 적절한 시간에 인덱스에서 채우기를 실행해야 합니다.

Important

전체 텍스트 인덱스가 이전에 다른 검색에 연결된 경우 속성 목록을 다시 작성해야 인덱스가 일관된 상태를 유지합니다. 인덱스는 즉시 잘려 전체 채우기를 실행할 때까지 비어 있습니다. 자세한 내용은 검색 속성 목록을 변경하여 인덱스 다시 작성을 참조하세요.

참고

지정한 검색 속성 목록을 같은 데이터베이스에 있는 둘 이상의 전체 텍스트 인덱스와 연결할 수 있습니다.

현재 데이터베이스에서 검색 속성 목록 찾기

검색 속성 목록에 대한 자세한 내용은 검색 속성 목록을 사용하여 문서 속성 검색을 참조하세요.

설명

xml 열에서는 XML 요소의 내용을 인덱싱하지만 XML 태그를 무시하는 전체 텍스트 인덱스를 만들 수 있습니다. 특성 값은 숫자 값이 아니면 전체 텍스트 인덱싱됩니다. 요소 태그는 토큰 경계로 사용됩니다. 여러 언어를 포함하는 올바른 형식의 XML 또는 HTML 문서와 조각이 지원됩니다. 자세한 내용은 XML 열에 전체 텍스트 검색 사용을 참조하세요.

인덱스 키 열에는 정수 데이터 형식을 사용하는 것이 좋습니다. 이렇게 하면 쿼리 실행 시간이 최적화됩니다.

ALTER FULLTEXT INDEX는 사용자 트랜잭션 내에 배치할 수 없습니다. 이 문은 자체 암시적 트랜잭션에서 실행되어야 합니다.

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

변경 내용 추적 및 NO POPULATION 매개 변수의 상호 작용

전체 텍스트 인덱스가 채워지는지 여부는 변경 내용 추적이 설정되어 있는지 여부와 ALTER FULLTEXT INDEX 문에 WITH NO POPULATION이 지정되어 있는지 여부에 따라 달라집니다. 다음 표에서는 이러한 상호 작용의 결과를 요약합니다.

Change tracking WITH NO POPULATION 결과
사용 안 함 지정되지 않음 인덱스에 대해 전체 채우기가 수행됩니다.
사용 안 함 지정됨 ALTER FULLTEXT INDEX...START POPULATION 문이 실행될 때까지 인덱스 채우기가 발생하지 않습니다.
사용 지정됨 오류가 발생하고 인덱스가 변경되지 않습니다.
사용 지정되지 않음 인덱스에 대해 전체 채우기가 수행됩니다.

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

검색 속성 목록을 변경하면 인덱스가 다시 작성됩니다.

처음으로 전체 텍스트 인덱스를 검색 속성 목록과 연결할 때 인덱스가 다시 채워져야 속성별 검색 단어가 인덱싱됩니다. 기존 인덱스 데이터는 잘리지 않습니다.

그러나 전체 텍스트 인덱스를 다른 속성 목록과 연결할 경우 인덱스가 다시 작성됩니다. 다시 작성할 경우 전체 텍스트 인덱스가 즉시 잘리고 기존 데이터가 모두 제거되며 인덱스를 다시 채워야 합니다. 채우기가 진행되는 동안 기본 테이블의 전체 텍스트 쿼리는 채우기를 통해 이미 인덱싱된 테이블 행만 검색합니다. 다시 채워진 인덱스 데이터에는 새로 추가된 검색 속성 목록의 등록된 속성의 메타데이터가 포함됩니다.

인덱스를 다시 작성해야 하는 시나리오는 다음과 같습니다.

  • 다른 검색 속성 목록으로 직접 전환합니다(이 섹션의 뒷부분에 있는 "시나리오 A" 참조).

  • 검색 속성 목록을 해제하고 나중에 인덱스와 검색 속성 목록을 연결합니다(이 섹션의 뒷부분에 있는 "시나리오 B" 참조).

참고 항목

전체 텍스트 검색이 검색 속성 목록과 함께 작동하는 방법에 대한 자세한 내용은 검색 속성 목록을 사용하여 문서 속성 검색을 참조하세요. 전체 채우기에 대한 자세한 내용은 전체 텍스트 인덱스 채우기를 참조하세요.

시나리오 A: 다른 검색 속성 목록으로 직접 전환

  1. table_1에서 검색 속성 목록 spl_1을 사용하여 전체 텍스트 인덱스가 생성됩니다.

    CREATE FULLTEXT INDEX ON table_1 (column_name) KEY INDEX unique_key_index
        WITH SEARCH PROPERTY LIST=spl_1,
        CHANGE_TRACKING OFF, NO POPULATION;
    
  2. 전체 텍스트 인덱스에서 전체 채우기가 실행됩니다.

    ALTER FULLTEXT INDEX ON table_1 START FULL POPULATION;
    
  3. 다음 문을 사용하여 전체 텍스트 인덱스가 나중에 다른 검색 속성 목록 spl_2와 연결됩니다.

    ALTER FULLTEXT INDEX ON table_1 SET SEARCH PROPERTY LIST spl_2;
    

    이 문을 사용하면 기본 동작인 전체 채우기가 실행됩니다. 그러나 이 채우기를 시작하기 전에 전체 텍스트 엔진이 자동으로 인덱스를 자릅니다.

시나리오 B: 검색 속성 목록을 해제하고 나중에 인덱스와 검색 속성 목록 연결

  1. table_1에서 검색 속성 목록 spl_1을 사용하여 전체 텍스트 인덱스가 생성된 후 자동 전체 채우기가 실행됩니다(기본 동작).

    CREATE FULLTEXT INDEX ON table_1 (column_name) KEY INDEX unique_key_index
        WITH SEARCH PROPERTY LIST=spl_1;
    
  2. 다음과 같이 검색 속성 목록이 해제됩니다.

    ALTER FULLTEXT INDEX ON table_1
        SET SEARCH PROPERTY LIST OFF WITH NO POPULATION;
    
  3. 같은 검색 속성 목록이나 다른 검색 속성 목록에 전체 텍스트 인덱스가 한 번 더 연결됩니다.

    예를 들어 다음 문은 전체 텍스트 인덱스와 원래 검색 속성 목록을 spl_1다시 연결합니다.

    ALTER FULLTEXT INDEX ON table_1 SET SEARCH PROPERTY LIST spl_1;
    

    이 문을 사용하면 기본 동작인 전체 채우기가 시작됩니다.

    참고

    spl_2과 같은 다른 검색 속성 목록에는 다시 작성이 필요합니다.

사용 권한

사용자는 테이블 또는 인덱싱된 뷰에 대한 ALTER 권한을 가지거나 sysadmin 고정 서버 역할, db_ddladmin 또는 db_owner 고정 데이터베이스 역할의 멤버여야 합니다.

SET STOPLIST를 지정한 경우 사용자는 중지 목록에 대한 REFERENCES 권한이 있어야 합니다. SET SEARCH PROPERTY LIST가 지정된 경우 사용자가 검색 속성 목록에 대한 REFERENCES 권한이 있어야 합니다. 지정한 중지 목록이나 검색 속성 목록의 소유자는 ALTER FULLTEXT CATALOG 권한을 가진 경우 REFERENCES 권한을 부여할 수 있습니다.

참고

public에는 SQL Server의 기본 중지 목록에 대한 REFERENCE 권한이 부여됩니다.

A. 수동 변경 내용 추적 설정

다음 예에서는 JobCandidate 테이블에서 전체 텍스트 인덱스에 대한 수동 변경 내용 추적을 설정합니다.

USE AdventureWorks2022;
GO
ALTER FULLTEXT INDEX ON HumanResources.JobCandidate
   SET CHANGE_TRACKING MANUAL;
GO

B. 속성 목록을 전체 텍스트 인덱스와 연결

적용 대상: SQL Server 2012(11.x) 이상 버전.

다음 예에서는 DocumentPropertyList 테이블에서 Production.Document 속성 목록을 전체 텍스트 인덱스와 연결합니다. 이 ALTER FULLTEXT INDEX 문이 전체 채우기를 시작합니다. 전체 채우기는 SET SEARCH PROPERTY LIST 절의 기본 동작입니다.

참고

DocumentPropertyList 속성 목록을 만드는 예는 CREATE SEARCH PROPERTY LIST(Transact-SQL)을 참조하세요.

USE AdventureWorks2022;
GO
ALTER FULLTEXT INDEX ON Production.Document
   SET SEARCH PROPERTY LIST DocumentPropertyList;
GO

C. 검색 속성 목록 제거

적용 대상: SQL Server 2012(11.x) 이상 버전.

다음 예에서는 DocumentPropertyList 속성 목록을 Production.Document에 있는 전체 텍스트 인덱스에서 제거합니다. 이 예제에서는 인덱스에서 속성을 제거하기 위해 서두르지 않으므로 WITH NO POPULATION 옵션이 지정됩니다. 그러나 이 전체 텍스트 인덱스에 대해 속성 수준 검색이 더 이상 허용되지 않습니다.

USE AdventureWorks2022;
GO
ALTER FULLTEXT INDEX ON Production.Document
   SET SEARCH PROPERTY LIST OFF WITH NO POPULATION;
GO

D. 전체 채우기 시작

다음 예에서는 JobCandidate 테이블에서 전체 텍스트 인덱스에 대한 전체 채우기를 시작합니다.

USE AdventureWorks2022;
GO
ALTER FULLTEXT INDEX ON HumanResources.JobCandidate
   START FULL POPULATION;
GO

참고 항목