フルテキスト インデックスの作成と管理には、「投入 (クロールとも呼ばれる)」プロセスを使用してインデックスを充実させることが必要です。
人口の種類
SQL Server では、インデックスの完全生成、変更追跡ベースの自動または手動生成、および増分タイムスタンプベースの生成という種類のインデックス生成がサポートされています。
総人口
フル ポピュレーション中には、テーブルまたはインデックス付きビューのすべての行に対してインデックスエントリが作成されます。 フルテキスト インデックスの完全な作成では、ベース テーブルまたはインデックス付きビューのすべての行のインデックス エントリが作成されます。
既定では、SQL Server は作成されるとすぐに、新しいフルテキスト インデックスを完全に設定します。 ただし、完全な人口は大量のリソースを消費する可能性があります。 そのため、ピーク期間中にフルテキスト インデックスを作成する場合、特にフルテキスト インデックスのベース テーブルが大きい場合は、ピーク時以外の時間まで完全な作成を遅らせるのがベスト プラクティスです。 ただし、インデックスが属するフルテキスト カタログは、そのフルテキスト インデックスがすべて設定されるまで使用できません。 フルテキスト インデックスをすぐに設定せずに作成するには、CREATE FULLTEXT INDEX ステートメントで CHANGE_TRACKING OFF,NO POPULATION 句を指定します。 CHANGE_TRACKING MANUALを指定した場合、Full-Text エンジンは文を使用します。 START FULL POPULATION 句または START INCREMENTAL POPULATION 句を使用して ALTER FULLTEXT INDEX ステートメントを実行するまで、SQL Server は新しいフルテキスト インデックスを設定しません。 詳細については、「A」を参照してください。 完全な集計を実行せずにフルテキストインデックスを作成する」と「B」 テーブルでの完全なデータの入力は、このトピックの後半を参照してください。
Tracking-Based の人口を変更
必要に応じて、変更の追跡を利用することで、最初の全面的な構築後もフルテキストインデックスを維持できます。 SQL Server では、前回の作成以降にベース テーブルへの変更を追跡するテーブルが保持されるため、変更の追跡に関連するオーバーヘッドが小さくなります。 変更の追跡を使用すると、SQL Server は、更新、削除、または挿入によって変更されたベース テーブルまたはインデックス付きビューの行のレコードを保持します。 WRITETEXT と UPDATETEXT を使用したデータの変更はフルテキスト インデックスに反映されず、変更の追跡では取得されません。
注
timestamp列を含むテーブルでは、段階的なデータ入力を使用できます。
インデックスの作成時に変更の追跡が有効になっている場合、SQL Server は、新しいフルテキスト インデックスが作成されると直ちに完全に充填されます。 その後、変更が追跡され、フルテキスト インデックスに反映されます。 変更の追跡には、自動 (CHANGE_TRACKING AUTO オプション) と手動 (CHANGE_TRACKING MANUAL オプション) の 2 種類があります。 自動変更追跡は既定の動作です。
次のように、変更の追跡の種類によって、フルテキスト インデックスの設定方法が決まります。
自動作成
既定では、または CHANGE_TRACKING AUTOを指定した場合、Full-Text エンジンはフルテキスト インデックスに対して自動更新を使用します。 最初の完全な作成が完了すると、ベース テーブルでデータが変更されると変更が追跡され、追跡された変更が自動的に反映されます。 ただし、フルテキスト インデックスはバックグラウンドで更新されるため、反映された変更がインデックスにすぐに反映されない場合があります。
自動入力を使用して変更履歴の追跡を設定するには
CREATE FULLTEXT INDEX ... 自動変更追跡付き
ALTER FULLTEXT INDEX ...変更追跡を自動設定
詳細については、「E. 自動変更追跡を使用するようにフルテキスト インデックスを変更する」と、このトピックの後半で説明します。
手動作成
manual CHANGE_TRACKING指定した場合、Full-Text エンジンはフルテキスト インデックスに手動作成を使用します。 初期の完全な集計が完了すると、基盤テーブルのデータが変更されるたびに、変更が追跡されます。 ただし、ALTER FULLTEXT INDEX ... START UPDATE POPULATION ステートメントを実行するまで、フルテキスト インデックスには反映されません。 SQL Server エージェントを使用して、この Transact-SQL ステートメントを定期的に呼び出すことができます。
手動入力で変更の追跡を開始するには
CREATE FULLTEXT INDEX ...CHANGE_TRACKINGマニュアル付き
ALTER FULLTEXT INDEX ...SET CHANGE_TRACKING MANUAL
詳細については、「C. 手動変更追跡と "D" を使用してフルテキスト インデックスを作成する。 手動作成の実行については、このトピックの後半で説明します。
変更の追跡を無効にするには
CREATE FULLTEXT INDEX ... 変更追跡オフで
ALTER FULLTEXT INDEX ...SET 変更追跡 OFF
インクリメンタル Timestamp-Based データ集団
増加人口は、フルテキスト インデックスを手動で生成するための代替メカニズムです。 フルテキスト インデックスで、CHANGE_TRACKING が MANUAL または OFF に設定されている場合、増分作成を実行できます。 フルテキスト インデックスの最初の生成が増分生成である場合は、すべての行がインデックスされ、完全な生成に相当します。
増分作成の要件は、インデックス付きテーブルに timestamp データ型の列が必要であることです。
timestamp列が存在しない場合は、増分処理をできない。
timestamp列のないテーブルに対する増分のデータ追加の要求は、完全なデータ追加操作になります。 また、テーブルのフルテキスト インデックスに影響するメタデータが前回の作成以降に変更された場合は、増分作成要求が完全作成として実装されます。 これには、列、インデックス、またはフルテキスト インデックスの定義を変更することによって発生するメタデータの変更が含まれます。
SQL Server では、 timestamp 列を使用して、前回の作成以降に変更された行を識別します。 増分ポピュレーションでは、最後のポピュレーション後、または最後のポピュレーションの進行中に追加、削除、または変更された行のフルテキスト インデックスが更新されます。 テーブルに大量の挿入が発生する場合、手動挿入よりも増分挿入を使用する方が効率的です。
あるシミュレーションの終了時に、Full-Text エンジンは新しい timestamp 値を記録します。 この値は、SQL Gatherer で検出された最大 timestamp 値です。 この値は、後続のインクリメンタル処理が開始されるときに使用されます。
増分インデックス作成を実行するには、START INCREMENTAL POPULATION 句を使用して ALTER FULLTEXT INDEX ステートメントを実行します。
Full-Text インデックスへの入力方法の例
注
このセクションの例では、AdventureWorks サンプル データベースのProduction.DocumentまたはHumanResources.JobCandidateテーブルを使用します。
ある。 実行せずにフルテキスト インデックスを完全な集計で作成する
次の例では、AdventureWorks サンプル データベースのProduction.Document テーブルにフルテキスト インデックスを作成します。 この例では、WITH CHANGE_TRACKING OFF、NO POPULATION を使用して、最初の完全な作成を遅らせます。
CREATE UNIQUE INDEX ui_ukDoc ON Production.Document(DocumentID);
CREATE FULLTEXT CATALOG AW_Production_FTCat;
CREATE FULLTEXT INDEX ON Production.Document
(
Document --Full-text index column name
TYPE COLUMN FileExtension --Name of column that contains file type information
Language 1033 --1033 is LCID for the English language
)
KEY INDEX ui_ukDoc
ON AW_Production_FTCat
WITH CHANGE_TRACKING OFF, NO POPULATION;
GO
B. テーブルに対するデータの完全な投入を実行する
次の例では、AdventureWorks サンプル データベースのProduction.Document テーブルで完全な作成を実行します。
ALTER FULLTEXT INDEX ON Production.Document
START FULL POPULATION;
C. 手動による変更追跡を使用したフルテキスト インデックスの作成
次の例では、AdventureWorksサンプル データベースの HumanResources.JobCandidate テーブルに変更追跡と手動作成を使用するフルテキスト インデックスを作成します。
USE AdventureWorks;
GO
CREATE UNIQUE INDEX ui_ukJobCand ON HumanResources.JobCandidate(JobCandidateID);
CREATE FULLTEXT CATALOG ft AS DEFAULT;
CREATE FULLTEXT INDEX ON HumanResources.JobCandidate(Resume)
KEY INDEX ui_ukJobCand
WITH CHANGE_TRACKING=MANUAL;
GO
D. 手動作成の実行
次の例では、AdventureWorks サンプル データベースのHumanResources.JobCandidate テーブルの変更追跡フルテキスト インデックスに対して手動作成を実行します。
USE AdventureWorks;
GO
ALTER FULLTEXT INDEX ON HumanResources.JobCandidate START UPDATE POPULATION;
GO
E. 自動変更追跡を使用するようにフルテキスト インデックスを変更する
次の例では、AdventureWorks サンプルデータベースのHumanResources.JobCandidate テーブルに対して、フルテキストインデックスを変更追跡機能が利用可能で自動的に更新されるように変更します。
USE AdventureWorks;
GO
ALTER FULLTEXT INDEX ON HumanResources.JobCandidate SET CHANGE_TRACKING AUTO;
GO
増分人口のスケジュールの作成または変更
Management Studio でインクリメンタル・ポピュレーションのスケジュールを作成または変更するには
オブジェクト エクスプローラーで、サーバーを展開します。
[ データベース] を展開し、フルテキスト インデックスを含むデータベースを展開します。
[テーブル]を展開します。
フルテキスト インデックスが定義されているテーブルを右クリックし、インデックス Full-Text 選択し、 Full-Text インデックス コンテキスト メニューの [プロパティ] をクリックします。 [ フルテキスト インデックスのプロパティ ] ダイアログ ボックスが開きます。
[ ページの選択 ] ウィンドウで、[スケジュール] を選択します。
このページを使用して、フルテキスト インデックスのベース テーブルまたはインデックス付きビューで増分テーブル作成を開始する SQL Server エージェント ジョブのスケジュールを作成または管理します。
重要
ベース テーブルまたはビューに
timestampデータ型の列が含まれていない場合は、フルポピュレーションが実行されます。オプションは次のとおりです。
新しいスケジュールを作成するには、[ 新規] をクリックします。
[ 新しい Full-Text インデックス作成テーブル のスケジュール ] ダイアログ ボックスが開き、スケジュールを作成できます。 スケジュールを保存するには、[ OK] をクリックします。
重要
SQL Server エージェント ジョブ ( database_name で増分テーブル作成を開始します。table_name) は、[ Full-Text インデックスのプロパティ ] ダイアログ ボックスを終了した後、新しいスケジュールに関連付けられます。 フルテキスト インデックスに対して複数のスケジュールを作成する場合、それらはすべて同じジョブを使用します。
スケジュールを変更するには、スケジュールを選択して [編集] をクリックします。
[ 新しい Full-Text インデックス作成テーブル のスケジュール ] ダイアログ ボックスが開き、スケジュールを変更できます。
注
ジョブの変更については、「ジョブの変更」 を参照してください。
スケジュールを削除するには、スケジュールを選択して [削除] をクリック します。
OK をクリックします。
Full-Text 集団 (クロール) でのエラーのトラブルシューティング
クロール中にエラーが発生すると、Full-Text 検索クロール ログ機能によって、プレーン テキスト ファイルであるクロール ログが作成され、保持されます。 各クロール ログは、特定のフルテキスト カタログに対応します。 既定では、特定のインスタンスのクロール ログ (この場合、最初のインスタンス) は %ProgramFiles%\Microsoft SQL Server\MSSQL12 にあります。MSSQLSERVER\MSSQL\LOG フォルダー。 クロール ログ ファイルは、次の名前付けスキームに従います。
SQLFT<DatabaseID><FullTextCatalogID>.LOG[<n>]
<DatabaseID>
データベースの ID。
<
dbid
> は 5 桁の数字で、先頭に 0 が付けられます。
<FullTextCatalogID>
フルテキスト カタログ ID。
<
catid
> は 5 桁の数字で、先頭に 0 が付けられます。
<n>
同じフルテキスト カタログの 1 つ以上のクロール ログが存在することを示す整数です。
たとえば、SQLFT0000500008.2 は、データベース ID = 5、フルテキスト カタログ ID = 8 のデータベースのクロール ログ ファイルです。 ファイル名の末尾にある 2 は、このデータベースとカタログのペアに対して 2 つのクロール ログ ファイルがあることを示します。
こちらもご覧ください
sys.dm_fts_index_population (Transact-SQL)
フルテキスト検索の概要
フルテキスト インデックスの作成と管理
フルテキスト インデックスを作成 (Transact-SQL)
ALTER FULLTEXT INDEX (Transact-SQL)