ALTER FULLTEXT INDEX (Transact-SQL)

フルテキスト インデックスのプロパティを変更します。

トピック リンク アイコン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 ] [,...n] )
     [ 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 ] 
   }
[;]

引数

  • table_name
    フルテキスト インデックスに含まれている列を格納するテーブルまたはインデックス付きビューの名前を指定します。データベース名とテーブル所有者名の指定は省略可能です。

  • ENABLE | DISABLE
    table_name のフルテキスト インデックス データを収集するかどうかを SQL Server に指示します。ENABLE はフルテキスト インデックスをアクティブにし、DISABLE はフルテキスト インデックスをオフにします。テーブルのインデックスが無効な場合、フルテキスト クエリはサポートされません。

    フルテキスト インデックスを無効にすると、変更の追跡が無効になりますが、フルテキスト インデックスは維持されます。ENABLE を使用することで、いつでもフルテキスト インデックスを有効に戻すことができます。フルテキスト インデックスがオフになると、フルテキスト インデックス メタデータはシステム テーブル内に残ります。フルテキスト インデックスがオフのときに CHANGE_TRACKING がオンの状態の場合 (自動または手動更新)、インデックスの状態が停止し、処理中のクロールが停止し、テーブル データへの新しい変更はインデックスに対して追跡または反映されません。

  • SET CHANGE_TRACKING {MANUAL | AUTO | OFF}
    フルテキスト インデックスの対象となるテーブル列の変更 (更新、削除、または挿入) が、SQL Server によってフルテキスト インデックスに反映されるかどうかを指定します。WRITETEXT および UPDATETEXT によるデータの変更は、フルテキスト インデックスには反映されず、変更の監視でも取得されません。

    注意

    変更の追跡と WITH 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 句は、フルテキスト インデックスが既に有効になっている列でのみ使用します。

    TYPE COLUMN および LANGUAGE を ADD 句と一緒に使用して、column_name にこのプロパティを設定します。列を追加する場合、この列に対するフルテキスト クエリが機能するように、テーブル上のフルテキスト インデックスを再作成する必要があります。

    注意

    列がフルテキスト インデックスに対して追加または削除された後、フルテキスト インデックスが作成されるかどうかは、変更の追跡が有効になっているかどうかと WITH NO POPULATION が指定されているかどうかによって決まります。詳細については、後の「解説」を参照してください。

  • TYPE COLUMN type_column_name
    varbinary、varbinary(max)、または image のドキュメント型の格納に使用されるテーブル列の名前 type_column_name を指定します。型列と呼ばれるこの列には、ユーザー指定のファイル拡張子 (.doc、.pdf、.xls など) が格納されます。型列の型は、char、nchar、varchar、または nvarchar であることが必要です。

    TYPE COLUMN type_column_name を指定できるのは、column_name に、データがバイナリ データとして格納される varbinary、varbinary(max) または image 列を指定した場合だけです。それ以外の場合、SQL Server ではエラーが返されます。

    注意

    Full-Text Engine は、インデックスを作成する際に、各テーブル行の型列の省略形を使用して、column_name でドキュメントに使用するフルテキスト検索フィルターを特定します。フィルターはドキュメントをバイナリ ストリームとして読み込み、書式設定情報を削除し、ドキュメントからワード ブレーカー コンポーネントへテキストを送信します。詳細については、「フルテキスト検索フィルター」を参照してください。

  • LANGUAGE language_term
    column_name に格納されているデータの言語を指定します。

    language_term は省略可能で、言語のロケール識別子 (LCID) に対応する文字列、整数、または 16 進数の値を指定できます。language_term を指定した場合、その言語は検索条件のすべての要素に適用されます。値を指定しなかった場合は、SQL Server インスタンスの既定のフルテキスト言語が使用されます。

    SQL Server インスタンスの既定のフルテキスト言語に関する情報を取得するには、sp_configure ストアド プロシージャを使用します。詳細については、「default full-text language オプション」を参照してください。

    language_term を文字列で指定する場合は、syslanguages システム テーブルの alias 列の値と同じ値を指定します。文字列の場合は、'language_term' のように引用符 (') で囲む必要があります。language_term を整数で指定する場合は、その言語を表す実際の LCID を指定します。language_term を 16 進数値で指定する場合は、「0x」の後に LCID の 16 進数値を指定します。16 進数の値は、先頭の 0 を含め、8 桁以内で指定してください。

    値を 2 バイト文字セット (DBCS) の形式で指定すると、SQL Server で Unicode に変換されます。

    language_term で指定した言語に対しては、単語区切りや語幹検索などのリソースが有効になっている必要があります。指定した言語でこれらのリソースがサポートされていない場合、SQL Server ではエラーが返されます。

    列のデータ型が BLOB および XML 以外で、複数の言語のテキスト データが含まれている場合や、列に格納されているテキストの言語が不明な場合は、ニュートラル (0x0) 言語リソースを使用します。データ型が XML または BLOB の列に格納されているドキュメントに対しては、そのドキュメントの言語のエンコードがインデックス作成時に使用されます。たとえば、データ型が XML の列では、XML ドキュメントの属性 xml:lang によって言語が決定されます。クエリ時には、フルテキスト クエリ内で language_term を指定しない限り、前回 language_term に指定された値がフルテキスト クエリの既定の言語になります。

  • [ ,...n]
    複数の列が ADD または 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 ではインデックスで完全作成が実行されます。

    注意

    変更の追跡と WITH NO POPULATION の相関関係の詳細については、後の「解説」を参照してください。

  • START {FULL|INCREMENTAL|UPDATE} POPULATION
    SQL Server に対して、table_name のフルテキスト インデックスの作成を開始するように指示します。フルテキスト インデックス作成が既に進行中の場合、SQL Server は警告を返し、新しい作成は開始されません。

    • FULL
      行に対してインデックスが既に作成されていても、フルテキスト インデックス作成でテーブルのすべての行が取得されます。

    • INCREMENTAL
      最後の作成以降に変更された行のみがフルテキスト インデックス作成で取得されます。INCREMENTAL は、テーブルに timestamp 型の列がある場合のみ適用できます。フルテキスト カタログ内のテーブルに timestamp 型の列が含まれていない場合、テーブルには FULL 作成が適用されます。

    • UPDATE
      変更の監視インデックスが最後に更新されてから行われた、すべての挿入、更新、削除の処理を指定します。変更の監視の作成はテーブルで有効になっている必要がありますが、バックグラウンド更新インデックスまたは自動の変更の監視はオンにしないでください。

  • {STOP | PAUSE | RESUME } POPULATION
    進行中の作成を停止または一時停止します。あるいは、一時停止中の作成を停止または再開します。

    STOP POPULATION によって、自動の変更の監視またはバックグラウンド更新インデックスは停止しません。変更の監視を停止するには、SET CHANGE_TRACKING OFF を使用します。

    PAUSE POPULATION と RESUME POPULATION は完全作成に対してのみ使用できます。他の作成では停止した場所からクロールを再開するため、他の作成の種類の場合、これらのオプションは関与しません。

  • SET STOPLIST { OFF| SYSTEM | stoplist_name }
    インデックスが存在する場合、そのインデックスに関連付けられているフルテキスト ストップ リストを変更します。

    • OFF
      フルテキスト インデックスにストップ リストを関連付けないことを指定します。

    • SYSTEM
      このフルテキスト インデックスに対して既定のフルテキスト システム ストップ リストを使用することを指定します。

    • stoplist_name
      フルテキスト インデックスに関連付けるストップ リストの名前を指定します。

    詳細については、「ストップ ワードとストップ リスト」を参照してください。

説明

xml 列にフルテキスト インデックスを作成して XML 要素のコンテンツにインデックスを設定できますが、XML マークアップは無視されます。属性値には、数値でない限り、フルテキスト インデックスが設定されます。要素タグはトークンの境界として使用されます。複数言語を含む整形式の XML または HTML ドキュメントやフラグメントはサポートされます。詳細については、「XML 列のフルテキスト インデックス」を参照してください。

変更の追跡と NO POPULATION パラメーターの相関関係

フルテキスト インデックスが作成されるかどうかは、変更の追跡が有効になっているかどうかと、ALTER FULLTEXT INDEX ステートメントで WITH NO POPULATION が指定されているかどうかによって決まります。次の表は、その相関関係の結果をまとめたものです。

変更の追跡

WITH NO POPULATION

結果

有効ではない

指定なし

インデックスで完全作成が実行されます。

有効ではない

指定あり

ALTER FULLTEXT INDEX...START POPULATION ステートメントが実行されるまで、インデックスの作成は行われません。

有効

指定あり

エラーが発生し、インデックスは変更されません。

有効

指定なし

インデックスで完全作成が実行されます。

フルテキスト インデックスの作成の詳細については、「フルテキスト インデックスのカタログ作成」を参照してください。

権限

実行するには、テーブルまたはインデックス付きビューの ALTER 権限を持っているか、sysadmin 固定サーバー ロール、db_ddladmin 固定データベース ロールまたは db_owner 固定データベース ロールのメンバーであることが必要です。

SET STOPLIST を指定した場合は、ユーザーがそのストップ リストに対する REFERENCES 権限を持っている必要があります。ストップ リストの所有者がこの権限を許可できます。また、REFERENCES 権限を許可するには、ALTER FULLTEXT CATALOG 権限が必要です。

注意

public には、SQL Server に含まれる既定のストップ リストに対する REFERENCE 権限が許可されています。

A. 手動の変更追跡を設定する

次の例では、AdventureWorks2008R2 データベースの JobCandidate テーブルで、フルテキスト インデックスに対して手動での変更追跡を設定します。

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

B. 完全作成を開始する

次の例では、AdventureWorks2008R2 データベースの JobCandidate テーブルでフルテキスト インデックスの完全作成を開始します。

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