適用対象:SQL Server
Azure SQL データベース
Azure SQL Managed Instance
この記事では、SQL Server データベース エンジンで全文インデックスの作成、入力、管理方法について説明します。 全文索引は、表内の文字ベースの列に対するキーワード検索や言語検索をサポートします。
フルテキスト カタログを作成する
全文索引を作成する前に、全文カタログが必要です。 カタログは、1 つまたは複数のフルテキスト インデックス用の仮想コンテナーです。 詳細については、「 Full-Text カタログの作成および管理」をご覧ください。
フルテキスト インデックスを作成、変更、または削除する
フルテキスト インデックスを設定する
フルテキスト インデックスを作成および維持するプロセスは、ポピュレーション(クロールとも呼ばれます)と呼ばれます。 フルテキスト インデックスの作成方法には、3 種類あります。
- すべてのカタログの作成
- 変更の追跡に基づく作成
- タイムスタンプに基づく増分作成
詳細については、「 フルテキスト インデックスの作成」をご覧ください。
フルテキスト インデックスのプロパティを表示する
Transact-SQL で、フルテキスト インデックスのプロパティを表示する
| カタログ ビューまたは動的管理ビュー | 説明 |
|---|---|
| sys.fulltext_index_catalog_usages | フルテキスト カタログからフルテキスト インデックスへの参照ごとに 1 行のデータを返します。 |
| sys.fulltext_index_columns | フルテキスト インデックスの一部となっている列ごとに 1 行のデータを格納します。 |
| sys.fulltext_index_fragments | 全文索引は、全文索引断片と呼ばれる内部テーブルを用いて、逆さまのインデックスデータを格納します。 このビューを使って、これらの断片に関するメタデータをクエリできます。 このビューは、フルテキスト インデックスが含まれているすべてのテーブルのフルテキスト インデックス フラグメントごとに 1 行のデータを格納しています。 |
| sys.fulltext_indexes | 表形式オブジェクトのフルテキスト インデックスごとに 1 行のデータを保持します。 |
| sys.dm_fts_index_keywords | 指定されたテーブルのフルテキスト インデックスのコンテンツに関する情報を返します。 |
| sys.dm_fts_index_keywords_by_document | 指定されたテーブルについて、フルテキスト インデックスのドキュメント レベルのコンテンツに関連する情報を返します。 個々のキーワードは、複数のドキュメントに出現する場合があります。 |
| sys.dm_fts_index_population | 現在進行中のフルテキスト インデックス作成処理の情報を返します。 |
SQL Server Management Studio で、フルテキスト インデックスのプロパティを表示する
注
Azure SQL データベースのフルテキスト インデックスのプロパティを表示するには、Transact-SQL を使用します。
SQL Server Management Studio で、オブジェクト エクスプローラーでサーバーを展開します。
[データベース]を展開し、フルテキスト インデックスを含むデータベースを展開します。
[テーブル]を展開します。
フルテキスト インデックスが定義されているテーブルを右クリックし、 [フルテキスト インデックス]コンテキスト メニューの [フルテキスト インデックス] を選択して、 [プロパティ]をクリックします。 この操作で全 文インデックスプロパティ ダイアログボックスが開きます。
ページ 選択 パネルで、以下のいずれかのページを選択します:
ページ 説明 全般 フルテキスト インデックスの基本的なプロパティが表示されます。 これらのプロパティには、いくつかの変更可能なプロパティと、データベース名、テーブル名、全文キーカラム名など、多くの変更不可能なプロパティが含まれます。 変更可能なプロパティは次のとおりです。
フルテキスト インデックス ストップリスト
フルテキスト インデックス有効
変更履歴
検索プロパティ リスト列 フルテキスト インデックスを作成できるテーブル列が表示されます。 選択した列にはフルテキスト インデックスが設定されています。 フルテキスト インデックスに含める列はいくつでも選択できます。 詳細については、「 フルテキスト インデックスの作成」をご覧ください。 スケジュール このページでは、フルテキスト インデックスを作成するためのテーブルの増分作成を開始する SQL Server エージェント ジョブのスケジュールを作成または管理できます。 詳細については、「 フルテキスト インデックスの作成」をご覧ください。
注意:Full-Text インデックスプロパティダイアログボックスを終了すると、新たに作成されたスケジュールはSQL Server エージェントジョブ(database_nameでインクリメンタルテーブルの人口開始)に関連付けられます。table_name)。[OK] を選択して変更を保存し、[フルテキスト インデックスのプロパティ] ダイアログ ボックスを終了します。
インデックス付きテーブルと列のプロパティの表示
OBJECTPROPERTYEXなどの複数の Transact-SQL 関数を使って、さまざまな全文インデックスプロパティの値を取得できます。 この情報は、フルテキスト検索の管理およびトラブルシューティングに役立ちます。
次の表に、インデックスが作成されたテーブルおよび列に関連したフルテキスト プロパティと、それに関連する Transact-SQL 関数の一覧を示します。
| プロパティ | 説明 | 機能 |
|---|---|---|
| FullTextTypeColumn |
TYPE COLUMN カラムのドキュメントタイプ情報を含むテーブルに。 |
COLUMNPROPERTY |
| IsFulltextIndexed | カラムが全文インデックス作成が有効かどうかを指定します。 | COLUMNPROPERTY |
| IsFulltextKey | インデックスがテーブルのフルテキスト キーであるかどうかを示します。 | INDEXPROPERTY |
| TableFulltextBackgroundUpdateIndexOn | テーブルがフルテキスト インデックスをバックグラウンドで更新できるかどうかを示します。 | OBJECTPROPERTYEX |
| TableFulltextCatalogId | テーブルのフルテキスト インデックス データが存在する、フルテキスト カタログ ID。 | OBJECTPROPERTYEX |
| TableFulltextChangeTrackingOn | テーブルでフルテキストの変更の追跡が有効になっているかどうかを示します。 | OBJECTPROPERTYEX |
| TableFulltextDocsProcessed | フルテキスト インデックス作成の開始以降に処理された行の数。 | OBJECTPROPERTYEX |
| TableFulltextFailCount | フルテキスト検索でインデックスされなかった行数。 | OBJECTPROPERTYEX |
| TableFulltextItemCount | フルテキスト インデックスが正常に設定された行数。 | OBJECTPROPERTYEX |
| TableFulltextKeyColumn | 一意なフルテキスト キー列の列 ID。 | OBJECTPROPERTYEX |
| TableFullTextMergeStatus | フルテキスト インデックスを持つテーブルが現在マージ中であるかどうかを示します。 | OBJECTPROPERTYEX |
| TableFulltextPendingChanges | 処理対象の未処理の変更追跡エントリ数。 | OBJECTPROPERTYEX |
| TableFulltextPopulateStatus | フルテキスト テーブルのポピュレーション状態。 | OBJECTPROPERTYEX |
| TableHasActiveFulltextIndex | テーブルが有効なフルテキスト インデックスを持っているかどうかを示します。 | OBJECTPROPERTYEX |
フルテキスト キー列の情報の取得
通常、 CONTAINSTABLE または FREETEXTTABLE 行セット値関数の結果をベーステーブルと結合します。 その場合、一意なキー列の名前を把握している必要があります。 特定の一意インデックスが全文キーとして使われているかどうか確認でき、全文キーの列の識別子も取得できます。
一意のインデックスがフルテキスト キー列として使用されているかどうかを調査する
SELECT ステートメントを使用して、 INDEXPROPERTY 関数を呼び出します。 関数呼び出しでは、 OBJECT_ID 関数を使ってテーブル名(table_name)をテーブルIDに変換し、テーブルの一意インデックス名を指定し、 IsFulltextKey インデックスプロパティを指定します。
SELECT INDEXPROPERTY(OBJECT_ID('table_name'), 'index_name', 'IsFulltextKey');
この文は、インデックスが全文キー列の一意性を強制する場合に 1 を返し、そうでない場合は 0 返します。
例
以下の例は、 PK_Document_DocumentNode インデックスが全文キー列の一意性を強制しているかどうかを確認します。
USE AdventureWorks2025;
GO
SELECT INDEXPROPERTY(OBJECT_ID('Production.Document'), 'PK_Document_DocumentNode', 'IsFulltextKey');
この例では、 PK_Document_DocumentNode インデックスが全文キー列の一意性を強制する場合、1を返します。 そうでなければ0または NULLを返します。
NULL つまり、無効なインデックス名を使っている、そのインデックス名がテーブルに対応していない、テーブルが存在しない、などです。
フルテキスト キー列の識別子を検索する
全文対応の各テーブルには、テーブルの一意行を強制する列( 一意 キーカラム)があります。
TableFulltextKeyColumn関数から得られるOBJECTPROPERTYEXプロパティは、一意キー列の列IDを含みます。
この識別子を取得するには、SELECT関数を呼び出すOBJECTPROPERTYEX文を使います。
OBJECT_ID関数を使ってテーブル名(table_name)をテーブルIDに変換し、TableFulltextKeyColumnプロパティを指定します。以下のように。
SELECT OBJECTPROPERTYEX(OBJECT_ID('table_name'), 'TableFulltextKeyColumn') AS 'Column Identifier';
例
以下の例では、全文検索キー列の識別子または NULL を返します。
NULL 無効なインデックス名を使っている、インデックス名がテーブルに対応していない、テーブルが存在しない、などを示唆しています。
USE AdventureWorks2025;
GO
SELECT OBJECTPROPERTYEX(OBJECT_ID('Production.Document'), 'TableFulltextKeyColumn');
GO
以下の例は、一意キーカラムの識別子を使ってカラム名を取得する方法を示しています。
USE AdventureWorks2025;
GO
DECLARE @key_column AS SYSNAME;
SET @key_column = COL_NAME(
OBJECT_ID('Production.Document'),
OBJECTPROPERTYEX(OBJECT_ID('Production.Document'), 'TableFulltextKeyColumn')
);
SELECT @key_column AS 'Unique Key Column';
GO
この例では、Unique Key Column という名前の結果セット列が返され、Document テーブルの一意のキー列の名前 DocumentNode を含む単一行が表示されます。 もしこのクエリに無効なインデックス名が含まれていて、インデックス名がテーブルに対応していなかったり、テーブルが存在しなかったりした場合、返 NULLとなります。
varbinary(max) 列および XML 列にインデックスを付ける
varbinary(max)、varbinary、xmlの列を全文インデックス付けする場合、他の全文インデックス付き列と同様に、全文述語(CONTAINSとFREETEXT)や関数(CONTAINSTABLEとFREETEXTTABLE)を使ってクエリできます。
varbinary(max) または varbinary データのインデックス
単一の varbinary(max) 列、または varbinary 列は、さまざまな種類のドキュメントを格納できます。 データベース エンジンは、フィルターがインストールされ、オペレーティングシステム上で利用可能な任意の文書タイプをサポートします。 各ドキュメントのドキュメント型は、ドキュメントのファイル拡張子によって識別されます。 例えば、.docファイル拡張子の場合、全文検索はMicrosoft Word文書をサポートするフィルターを使用します。 使用可能なドキュメント型の一覧を確認するには、 sys.fulltext_document_types カタログ ビューに対してクエリを実行してください。
Full-Text Engine では、オペレーティング システムにインストールされている既存のフィルターを使用できます。 オペレーティング システムのフィルター、ワード ブレーカー、およびステミング機能を使用する前に、次のコードを実行してこれらのリソースをサーバー インスタンスに読み込む必要があります。
EXECUTE sp_fulltext_service
@action = 'load_os_resources',
@value = 1;
varbinary(max) 列にフルテキスト インデックスを作成するには、Full-Text Engine が varbinary(max) 列にあるドキュメントのファイル拡張子にアクセスする必要があります。 この情報を、全文インデックスの varbinary(max) 列に関連付けられたタイプ列と呼ばれるテーブルカラムに保存しなければなりません。 Full-Text Engine は、ドキュメントにインデックスを作成する際に、型列のファイル拡張子を参照して、使用するフィルターを特定します。
XML データのインデックス
xml データ型の列には、XML ドキュメントと XML フラグメントのみが格納されます。XML ドキュメントには XML フィルターのみが使用されるため、 型列は必要ありません。 xml 列では、フルテキスト インデックスによって XML 要素のコンテンツにインデックスが設定されますが、XML マークアップは無視されます。 属性値には、数値でない限り、フルテキスト インデックスが設定されます。 要素タグはトークンの境界として使用されます。 複数言語を含む整形式の XML または HTML ドキュメントやフラグメントはサポートされます。
XML列のインデックス作成やクエリについての詳細は、「XML列での全文検索の使用」をご覧ください。
テーブルのフルテキスト インデックスを無効または再度有効にする
データベース エンジンでは、ユーザーが作成したすべてのデータベースはデフォルトで全文が有効です。 さらに、個々のテーブルに対してフルテキスト インデックスを作成し、これに列を追加すると、その時点で、このテーブルでは自動的にフルテキスト インデックスが有効になります。 フルテキスト インデックスから最後の列を削除すると、このテーブルでは自動的にフルテキスト インデックスが無効になります。
全文インデックスを持つテーブルでは、SQL Server Management Studioを使って手動で全文インデックス作成の無効化または再有効化が可能です。
サーバー グループを展開し、 [データベース]を展開して、フルテキスト インデックスを有効にするテーブルを含むデータベースを展開します。
[テーブル]を展開し、フルテキスト インデックスを無効または再度有効にするテーブルを右クリックします。
[フルテキスト インデックス]を選択し、 [フルテキスト インデックスを無効化] または [フルテキスト インデックスを有効化]を選択します。
テーブルからフルテキスト インデックスを削除する
オブジェクト エクスプローラーで、削除するフルテキスト インデックスが含まれているテーブルを右クリックします。
[フルテキスト インデックスの削除]を選択します。
フルテキスト インデックスの削除を確認するメッセージが表示されたら、 [OK] を選択します。