ALTER FULLTEXT INDEX (Transact-SQL)
SQL Server で、フルテキスト インデックスのプロパティを変更します。
適用対象: SQL Server (SQL Server 2008: から現在のバージョンまで)、SQL Database V12。 |
構文
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 によるデータの変更は、フルテキスト インデックスには反映されず、変更の監視でも取得されません。注意
変更の追跡と 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 ストアド プロシージャを使用します。
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 に指定された値がフルテキスト クエリの既定の言語になります。
STATISTICAL_SEMANTICS
適用対象: SQL Server 2012 から SQL Server 2014
キー フレーズを追加で作成し、統計的セマンティック インデックス作成の一部である類似性のインデックスを記録します。 詳細については、「セマンティック検索 (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 ではインデックスで完全作成が実行されます。
注意
変更の追跡と WITH NO POPULATION の相関関係の詳細については、後の「解説」を参照してください。
{ADD | DROP } STATISTICAL_SEMANTICS
適用対象: SQL Server 2012 から SQL Server 2014
指定された列に対する統計的セマンティック インデックス作成を有効または無効にします。 詳細については、「セマンティック検索 (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 から SQL Server 2014
インデックスが存在する場合、そのインデックスに関連付けられている検索プロパティ リストを変更します。
OFF
フルテキスト インデックスにプロパティ リストを関連付けないことを指定します。 フル テキスト インデックス (ALTER FULLTEXT INDEX... の検索プロパティ リストを無効にする場合 セット検索プロパティ リスト OFF)、ベース テーブルでプロパティの検索が可能ではなくなりました。既定では、既存の検索プロパティ リストを無効にすると、フルテキスト インデックスが自動的に再作成されます。 検索プロパティ リストを無効にするときに WITH NO POPULATION を指定した場合、自動再作成は行われません。 ただし、都合のよいときにこのフルテキスト インデックスの完全作成を実行することをお勧めします。 フルテキスト インデックスを再作成すると、削除された各検索プロパティのプロパティ固有メタデータが削除されます。その結果、フルテキスト インデックスのサイズが小さくなり効率化します。
property_list_name
フルテキスト インデックスに関連付ける検索プロパティ リストの名前を指定します。検索プロパティ リストをフルテキスト インデックスに追加するには、インデックスの再作成を行い、関連付けられている検索プロパティ リストに登録される検索プロパティのインデックスを作成する必要があります。 検索プロパティ リストを追加するときに WITH NO POPULATION を指定した場合は、適切なタイミングでインデックスを作成する必要があります。
重要
フルテキスト インデックスが以前に別の検索に関連付けられていた場合、インデックスを一貫性のある状態にするには、プロパティ リストを再構築する必要があります。 インデックスは即座に切り捨てられ、完全作成が実行されるまで空になります。 検索プロパティ リストの変更によってインデックスが再構築される場合の詳細については、このトピックの「解説」を参照してください。
注意
特定の検索プロパティ リストを同じデータベース内の複数のフルテキスト インデックスに関連付けることができます。
現在のデータベース上に一覧表示、検索プロパティを検索するには
検索プロパティ リストの詳細については、「検索プロパティ リストを使用したドキュメント プロパティの検索」を参照してください。
解説
変更の追跡と NO POPULATION パラメーターの相関関係
フルテキスト インデックスが作成されるかどうかは、変更の追跡が有効になっているかどうかと、ALTER FULLTEXT INDEX ステートメントで WITH NO POPULATION が指定されているかどうかによって決まります。 次の表は、その相関関係の結果をまとめたものです。
変更の追跡 |
WITH NO POPULATION |
結果 |
---|---|---|
有効ではない |
指定なし |
インデックスで完全作成が実行されます。 |
有効ではない |
指定あり |
ALTER FULLTEXT INDEX...START POPULATION ステートメントが実行されるまで、インデックスの作成は行われません。 |
有効 |
指定あり |
エラーが発生し、インデックスは変更されません。 |
有効 |
指定なし |
インデックスで完全作成が実行されます。 |
フルテキスト インデックスの作成の詳細については、「フルテキスト インデックスの作成」を参照してください。
検索プロパティ リストの変更によるインデックスの再構築
フルテキスト インデックスを検索プロパティ リストに初めて関連付けるときには、プロパティに固有の検索語句のインデックスを作成するためにインデックスを再作成する必要があります。 既存のインデックス データの切り捨ては行われません。
ただし、フルテキスト インデックスを別のプロパティ リストに関連付けると、インデックスが再構築されます。 再構築によりフルテキスト インデックスが即座に切り捨てられ、既存のデータがすべて削除されるため、インデックスの再作成が必要です。 作成処理の間、ベース テーブルでのフルテキスト クエリでは、作成処理によってインデックスが既に作成されているテーブル行のみが検索の対象となります。 再作成されるインデックス データには、新たに追加された検索プロパティ リストの登録済みプロパティのメタデータが含まれます。
再構築が行われるシナリオの例を以下に示します。
別の検索プロパティ リストに直接切り替える場合 (このセクションの「シナリオ A」を参照)
検索プロパティ リストを無効にし、インデックスを任意の検索プロパティ リストに関連付ける場合 (このセクションの「シナリオ B」を参照)
注意
フルテキスト検索での検索プロパティ リストの処理方法の詳細については、「検索プロパティ リストを使用したドキュメント プロパティの検索」を参照してください。 完全作成の詳細については、「フルテキスト インデックスの作成」を参照してください。
シナリオ A: 別の検索プロパティ リストに直接切り替える場合
検索プロパティ リスト 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;
フルテキスト インデックスの完全作成が実行されます。
ALTER FULLTEXT INDEX ON table_1 START FULL POPULATION;
この後フルテキスト インデックスは、次のステートメントを使用して別の検索プロパティ リスト spl_2 に関連付けられます。
ALTER FULLTEXT INDEX ON table_1 SET SEARCH PROPERTY LIST spl_2;
このステートメントにより、完全作成が実行されます。これは既定の動作です。 ただし、この処理を開始する前に、Full-Text Engine によりインデックスが自動的に切り捨てられます。
シナリオ B: 検索プロパティ リストを無効にし、インデックスを任意の検索プロパティ リストに関連付ける場合
検索プロパティ リスト table_1 を持つ spl_1 にフルテキスト インデックスが作成され、完全作成が自動的に実行されます (既定の動作)。
CREATE FULLTEXT INDEX ON table_1 (column_name) KEY INDEX unique_key_index WITH SEARCH PROPERTY LIST=spl_1;
次に示すように、検索プロパティ リストが無効になります。
ALTER FULLTEXT INDEX ON table_1 SET SEARCH PROPERTY LIST OFF WITH NO POPULATION;
フルテキスト インデックスが同じ検索プロパティ リストまたは別の検索プロパティ リストにもう一度関連付けられます。
たとえば、次のステートメントは、フルテキスト インデックスを元の検索プロパティ リスト 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 権限を許可できます。
注意
一般のユーザーには、SQL Server に含まれる既定のストップリストに対する REFERENCES 権限が許可されています。
使用例
A. 手動の変更追跡を設定する
次の例では、JobCandidate テーブルで、フルテキスト インデックスに対して手動での変更追跡を設定します。
USE AdventureWorks2012;
GO
ALTER FULLTEXT INDEX ON HumanResources.JobCandidate
SET CHANGE_TRACKING MANUAL;
GO
B. プロパティ リストをフルテキスト インデックスに関連付ける
に適用されます: SQL Server 2012 を通じて SQL Server 2014です。 |
次の例では、DocumentPropertyList テーブルでフルテキスト インデックスに Production.Document プロパティ リストを関連付けます。 この ALTER FULLTEXT INDEX ステートメントにより、完全作成が開始されます。これは、SET SEARCH PROPERTY LIST 句の既定の動作です。
注意
DocumentPropertyList プロパティ リストを作成する例については、「CREATE SEARCH PROPERTY LIST (Transact-SQL)」を参照してください。
USE AdventureWorks2012;
GO
ALTER FULLTEXT INDEX ON Production.Document
SET SEARCH PROPERTY LIST DocumentPropertyList;
GO
C. 検索プロパティ リストを削除する
に適用されます: SQL Server 2012 を通じて SQL Server 2014です。 |
次の例では、DocumentPropertyList でフルテキスト インデックスから Production.Document プロパティ リストを削除します。 この例では、インデックスからプロパティをすぐに削除する必要はないため、WITH NO POPULATION オプションが指定されています。 ただし、このフルテキスト インデックスに対するプロパティ レベルの検索は実行できなくなります。
USE AdventureWorks2012;
GO
ALTER FULLTEXT INDEX ON Production.Document
SET SEARCH PROPERTY LIST OFF WITH NO POPULATION;
GO
D. 完全作成を開始する
次の例では、JobCandidate テーブルでフルテキスト インデックスの完全作成を開始します。
USE AdventureWorks2012;
GO
ALTER FULLTEXT INDEX ON HumanResources.JobCandidate
START FULL POPULATION;
GO
参照
sys.fulltext_indexes (Transact-SQL)
CREATE FULLTEXT INDEX (Transact-SQL)
DROP FULLTEXT INDEX (Transact-SQL)
フルテキスト検索
フルテキスト インデックスの作成