ALTER FULLTEXT INDEX (Transact-SQL)

適用対象:SQL ServerAzure SQL DatabaseAzure 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 ]
   }
[ ; ]

Note

SQL Server 2014 (12.x) 以前のバージョンの Transact-SQL 構文を確認するには、以前のバージョンのドキュメントを参照してください。

引数

table_name

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

ENABLE | DISABLE

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

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

SET CHANGE_TRACKING { MANUAL | AUTO | OFF }

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

Note

詳細については、「変更の追跡と NO POPULATION パラメーターの相関関係」を参照してください。

  • MANUAL

    追跡された変更の反映を ALTER FULLTEXT INDEX ... START UPDATE POPULATION Transact-SQL ステートメントの呼び出しによって手動で行うこと (手動作成) を指定します。 SQL Server エージェントを使用すると、この Transact-SQL ステートメントを定期的に呼び出すことができます。

  • AUTO

    ベース テーブルでデータが変更されたときに、追跡された変更を自動的に反映すること (自動作成) を指定します。 この場合、フルテキスト インデックスに対して変更は自動的に反映されますが、反映までに少し時間がかかることがあります。 AUTO は既定値です。

  • OFF

    SQL Server で、インデックスの対象となるデータに対して行われた変更の一覧を保持しません。

ADD | DROP column_name

フルテキスト インデックスに対して追加または削除する列を指定します。 列は、charvarcharncharnvarchartextntextimagexmlvarbinaryvarbinary(max) のいずれかの型にする必要があります。

DROP 句は、フルテキスト インデックスが既に有効になっている列でのみ使用します。

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

Note

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

TYPE COLUMN type_column_name

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

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

Note

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

LANGUAGE language_term

column_name に格納されているデータの言語。

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

SQL Server インスタンスの既定のフルテキスト言語に関する情報を取得するには、sp_configure ストアド プロシージャを使用します。

文字列で指定する場合、language_term は sys.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 に指定された値がフルテキスト クエリの既定の言語になります。

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 ではインデックスで完全作成が実行されます。

Note

詳細については、「変更の追跡と NO POPULATION パラメーターの相関関係」を参照してください。

{ADD | DROP } STATISTICAL_SEMANTICS

適用対象: SQL Server 2012 (11.x) 以降のバージョン

指定された列に対する統計的セマンティック インデックス作成を有効または無効にします。 詳細については、「セマンティック検索 (SQL Server)」を参照してください。

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

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

詳細については、「 フルテキスト検索に使用するストップワードとストップリストの構成と管理」を参照してください。

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 を指定した場合は、適切なタイミングでインデックスを作成する必要があります。

重要

フルテキスト インデックスが以前に別の検索に関連付けられていた場合、インデックスを一貫性のある状態にするには、プロパティ リストを再構築する必要があります。 インデックスは即座に切り捨てられ、完全作成が実行されるまで空になります。 詳細については、「検索プロパティ リストの変更によるインデックスの再構築」を参照してください。

Note

特定の検索プロパティ リストを同じデータベース内の複数のフルテキスト インデックスに関連付けることができます。

現在のデータベースで検索プロパティを検索する

検索プロパティ リストについて詳しくは、「検索プロパティ リストを使用したドキュメント プロパティの検索」をご覧ください。

解説

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

インデックス キー列は整数データ型にすることをお勧めします。 整数データ型にすると、クエリの実行が最適化されます。

ALTER FULLTEXT INDEX は、ユーザー トランザクション内に配置できません。 このステートメントは、独自の暗黙的なトランザクションで実行する必要があります。

フルテキスト インデックスについて詳しくは、「フルテキスト インデックスの作成と管理」をご覧ください。

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

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

変更の追跡 WITH NO POPULATION 結果
無効 指定なし インデックスで完全作成が実行されます。
無効 指定済み ALTER FULLTEXT INDEX...START POPULATION ステートメントが実行されるまで、インデックスの作成は行われません。
Enabled 指定済み エラーが発生し、インデックスは変更されません。
Enabled 指定なし インデックスで完全作成が実行されます。

フルテキスト インデックスの作成について詳しくは、「フルテキスト インデックスの作成」をご覧ください。

検索プロパティ リストの変更によるインデックスの再構築

フルテキスト インデックスを検索プロパティ リストに初めて関連付けるときには、プロパティに固有の検索語句のインデックスを作成するためにインデックスを再作成する必要があります。 既存のインデックス データの切り捨ては行われません。

ただし、フルテキスト インデックスを別のプロパティ リストに関連付けると、インデックスが再構築されます。 再構築によりフルテキスト インデックスが即座に切り捨てられ、既存のデータがすべて削除されるため、インデックスの再作成が必要です。 作成処理の間、ベース テーブルでのフルテキスト クエリでは、作成処理によってインデックスが既に作成されているテーブル行のみが検索の対象となります。 再作成されるインデックス データには、新たに追加された検索プロパティ リストの登録済みプロパティのメタデータが含まれます。

再構築が行われるシナリオの例を以下に示します。

  • 別の検索プロパティ リストに直接切り替える場合 (このセクションの「シナリオ A」を参照)

  • 検索プロパティ リストを無効にし、インデックスを任意の検索プロパティ リストに関連付ける場合 (このセクションの「シナリオ B」を参照)

Note

検索プロパティ リストでのフルテキスト検索の動作について詳しくは、「検索プロパティ リストを使用したドキュメント プロパティの検索」をご覧ください。 完全な作成について詳しくは、「フルテキスト インデックスの作成」をご覧ください。

シナリオ A: 別の検索プロパティ リストに直接切り替える場合

  1. 検索プロパティ リスト spl_1 を使って table_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;
    

    このステートメントにより、完全作成が実行されます。これは既定の動作です。 ただし、この処理を開始する前に、Full-Text Engine によりインデックスが自動的に切り捨てられます。

シナリオ B: 検索プロパティ リストを無効にし、インデックスを任意の検索プロパティ リストに関連付ける場合

  1. 検索プロパティ リスト spl_1 を持つ table_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;
    

    このステートメントにより、完全作成が開始されます。これは既定の動作です。

    Note

    spl_2 など、別の検索プロパティ リストについても再構築が必要です。

アクセス許可

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

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

Note

一般のユーザーには、SQL Server に含まれる既定のストップリストに対する REFERENCES 権限が許可されています。

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

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

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

B. プロパティ リストをフルテキスト インデックスに関連付ける

適用対象: SQL Server 2012 (11.x) 以降のバージョン

次の例では、Production.Document テーブルでフルテキスト インデックスに DocumentPropertyList プロパティ リストを関連付けます。 この ALTER FULLTEXT INDEX ステートメントにより、完全作成が開始されます。これは、SET SEARCH PROPERTY LIST 句の既定の動作です。

Note

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

関連項目