ドキュメントまたはテキストを含む選択した列の統計セマンティック インデックス作成を有効または無効にする方法について説明します。
統計セマンティック検索では、Full-Text Search によって作成されたインデックスが使用され、追加のインデックスが作成されます。 このフルテキスト検索への依存関係の結果として、新しいフルテキスト インデックスを定義するとき、または既存のフルテキスト インデックスを変更するときに、新しいセマンティック インデックスを作成します。 新しいセマンティック インデックスは、Transact-SQL ステートメントを使用するか、SQL Server Management Studio の Full-Text インデックス作成ウィザードやその他のダイアログ ボックスを使用して作成できます。これについては、このトピックで説明します。
セマンティック インデックスの作成
セマンティック インデックスを作成するための要件と制限事項
テーブルやインデックス付きビューなど、フルテキスト インデックス作成でサポートされている任意のデータベース オブジェクトにインデックスを作成できます。
特定の列のセマンティック インデックス作成を有効にする前に、次の前提条件が存在する必要があります。
データベースにはフルテキスト カタログが存在する必要があります。
テーブルにはフルテキスト インデックスが必要です。
選択した列は、フルテキスト インデックスに含まれている必要があります。
これらのすべての要件を同時に作成して有効にすることができます。
フルテキスト インデックス作成でサポートされている任意のデータ型を持つ列にセマンティック インデックスを作成できます。 詳細については、「 Full-Text インデックスの作成と管理」を参照してください。
varbinary(max)列のフルテキスト インデックス作成でサポートされている任意のドキュメントの種類を指定できます。 詳細については、このトピックの「 方法: インデックスを作成できるドキュメントの種類を決定する」 を参照してください。セマンティック インデックス作成では、選択した列に対して、キー フレーズのインデックスとドキュメントの類似性のインデックスという 2 種類のインデックスが作成されます。 セマンティック インデックス作成を有効にした場合は、1 つの種類のインデックスのみを選択することはできません。 ただし、これら 2 つのインデックスは個別にクエリを実行できます。 詳細については、「 セマンティック検索を使用したドキュメントのキー フレーズの検索」および「セマンティック検索 を使用 した類似ドキュメントおよび関連ドキュメントの検索」を参照してください。
セマンティック インデックスに LCID を明示的に指定しない場合、セマンティック インデックス作成には、プライマリ言語とそれに関連付けられている言語統計のみが使用されます。
言語モデルが使用できない列の言語を指定した場合、インデックスの作成は失敗し、エラー メッセージが返されます。
方法: Full-Text インデックスがない場合にセマンティック インデックスを作成する
CREATE FULLTEXT INDEX ステートメントを使用して新しいフルテキスト インデックスを作成する場合は、列定義の一部としてキーワード STATISTICAL_SEMANTICSを指定することで、列レベルでセマンティック インデックス作成を有効にすることができます。 Full-Text インデックス作成ウィザードを使用して新しいフルテキスト インデックスを作成するときに、セマンティック インデックス作成を有効にすることもできます。
Transact-SQL を使用して新しいセマンティック インデックスを作成する
CREATE FULLTEXT INDEX ステートメントを呼び出し、セマンティック インデックスを作成する列ごとにSTATISTICAL_SEMANTICSを指定します。 このステートメントのすべてのオプションの詳細については、「 CREATE FULLTEXT INDEX (Transact-SQL)」を参照してください。
例 1: 一意のインデックス、フルテキスト インデックス、セマンティック インデックスを作成する
次の例では、既定のフルテキスト カタログ ft を作成します。 次に、AdventureWorks2012 サンプル データベースの HumanResources.JobCandidate テーブルの JobCandidateID 列に一意のインデックスを作成します。 この一意のインデックスは、フルテキスト インデックスのキー列として必要です。 次に、 Resume 列にフルテキスト インデックスとセマンティック インデックスを作成します。
CREATE FULLTEXT CATALOG ft AS DEFAULT
GO
CREATE UNIQUE INDEX ui_ukJobCand
ON HumanResources.JobCandidate(JobCandidateID)
GO
CREATE FULLTEXT INDEX ON HumanResources.JobCandidate
(Resume
Language 1033
Statistical_Semantics
)
KEY INDEX JobCandidateID
WITH STOPLIST = SYSTEM
GO
例 2: インデックスの作成が遅れている複数の列にフルテキスト インデックスとセマンティック インデックスを作成する
次の例では、AdventureWorks2012 サンプル データベースにフルテキスト カタログ (documents_catalog) を作成します。 次に、この新しいカタログを使用するフルテキスト インデックスを作成します。 フルテキスト インデックスは Production.Document テーブルの Title、DocumentSummary、および Document 列に作成されますが、セマンティック インデックスは Document 列でのみ作成されます。 このフルテキスト インデックスでは、新しく作成されたフルテキスト カタログと既存の一意のキー インデックス (PK_Document_DocumentID) が使用されます。 推奨されているように、このインデックス キーは、整数列 DocumentID に作成されます。 この例では、列内のデータの言語である英語 1033 の LCID を指定します。
この例では、データがない状態で変更追跡がオフになっていることを指定します。 その後、ピーク時間外に、 ALTER FULLTEXT INDEX ステートメントを使用して新しいインデックスの完全作成を開始し、自動変更追跡を有効にします。
CREATE FULLTEXT CATALOG documents_catalog
GO
CREATE FULLTEXT INDEX ON Production.Document
(
Title
Language 1033,
DocumentSummary
Language 1033,
Document
TYPE COLUMN FileExtension
Language 1033
Statistical_Semantics
)
KEY INDEX PK_Document_DocumentID
ON documents_catalog
WITH CHANGE_TRACKING OFF, NO POPULATION
GO
その後、オフピーク時にインデックスが更新されます。
ALTER FULLTEXT INDEX ON Production.Document SET CHANGE_TRACKING AUTO
GO
SQL Server Management Studio を使用して新しいセマンティック インデックスを作成する
Full-Text インデックス作成ウィザードを実行し、 セマンティック インデックスを作成する各列の [ テーブル列の選択 ] ページで統計セマンティクスを有効にします。 Full-Text インデックス作成ウィザードの起動方法などの詳細については、「 Full-Text インデックス作成ウィザードを使用する」を参照してください。
方法: 既存の Full-Text インデックスがある場合にセマンティック インデックスを作成する
ALTER FULLTEXT INDEX ステートメントを使用して既存のフルテキスト インデックスを変更するときに、セマンティック インデックス作成を追加できます。 SQL Server Management Studio のさまざまなダイアログ ボックスを使用して、セマンティック インデックス作成を追加することもできます。
Transact-SQL を使用してセマンティック インデックスを追加する
セマンティック インデックスを追加する列ごとに、以下で説明するオプションを使用して ALTER FULLTEXT INDEX ステートメントを呼び出します。 このステートメントのすべてのオプションの詳細については、 ALTER FULLTEXT INDEX (Transact-SQL) を参照してください。
特に指定しない限り、 ALTER の呼び出し後にフルテキスト インデックスとセマンティック インデックスの両方が再作成されます。
列にのみフルテキスト インデックスを追加するには、 ADD 構文を使用します。
フルテキスト インデックス作成とセマンティック インデックス作成の両方を列に追加するには、STATISTICAL_SEMANTICS オプションで ADD 構文を使用します。
フルテキスト インデックス作成が既に有効になっている列にセマンティック インデックス作成を追加するには、 ADD STATISTICAL_SEMANTICS オプションを使用します。 セマンティック インデックス作成は、1 つの ALTER ステートメント内の 1 つの列にのみ追加できます。
例: フルテキスト インデックスが既に作成されている列にセマンティック インデックス作成を追加する
次の例では、AdventureWorks2012 サンプル データベースの Production.Document テーブルの既存のフルテキスト インデックスを変更します。 この例では、既にフルテキスト インデックスがある Production.Document テーブルの Document 列にセマンティック インデックスを追加します。 この例では、インデックスが自動的に再作成されないように指定します。
ALTER FULLTEXT INDEX ON Production.Document
ALTER COLUMN Document
ADD Statistical_Semantics
WITH NO POPULATION
GO
SQL Server Management Studio を使用してセマンティック インデックスを追加する
セマンティック インデックス作成とフルテキスト インデックス作成が有効になっている列は、[Full-Text インデックスのプロパティ] ダイアログ ボックスの [Full-Text インデックス列] ページで変更できます。 詳細については、「 Full-Text インデックスの管理」を参照してください。
既存のインデックスを変更するための要件と制限事項
インデックスの作成中に既存のインデックスを変更することはできません。 インデックス作成の進行状況の監視の詳細については、「 セマンティック検索の管理と監視」を参照してください。
ALTER FULLTEXT INDEX ステートメントの 1 回の呼び出しでは、列にインデックスを追加したり、同じ列のインデックス作成を変更または削除したりすることはできません。
セマンティック インデックスの削除
方法: セマンティック インデックスを削除する
ALTER FULLTEXT INDEX ステートメントを使用して既存のフルテキスト インデックスを変更すると、セマンティック インデックス作成を削除できます。 SQL Server Management Studio のさまざまなダイアログ ボックスを使用して、セマンティック インデックス作成を削除することもできます。
Transact-SQL を使用してセマンティック インデックスを削除する
- 列または列からのみセマンティック インデックスを削除するには、ALTER COLUMNcolumn_nameDROP STATISTICAL_SEMANTICS オプションを指定して ALTER FULLTEXT INDEX ステートメントを呼び出します。 1 つの ALTER ステートメントで複数の列からインデックス作成を削除できます。
```sql
USE database_name
GO
ALTER FULLTEXT INDEX
ALTER COLUMN column_name
DROP STATISTICAL_SEMANTICS
GO
```
列からフルテキスト インデックス作成とセマンティック インデックス作成の両方を削除するには、ALTER COLUMNcolumn_nameDROP オプションを指定して ALTER FULLTEXT INDEX ステートメントを呼び出します。
USE database_name GO ALTER FULLTEXT INDEX ALTER COLUMN column_name DROP GO
SQL Server Management Studio を使用してセマンティック インデックスを削除する
セマンティック インデックス作成とフルテキスト インデックス作成が有効になっている列は、[Full-Text インデックスのプロパティ] ダイアログ ボックスの [Full-Text インデックス列] ページで変更できます。 詳細については、「 Full-Text インデックスの管理」を参照してください。
セマンティック インデックスを削除するための要件と制限事項
セマンティック インデックス作成を保持している間は、列からフルテキスト インデックスを削除することはできません。 セマンティック インデックス作成は、ドキュメントの類似性の結果のフルテキスト インデックス作成に依存します。
セマンティック インデックス作成が有効になっているテーブルの最後の列からセマンティック インデックス作成を削除する場合、 NO POPULATION オプションを指定することはできません。 先にインデックス付けされた結果を削除するには、ポピュレーションサイクルが必要です。
データベース オブジェクトでセマンティック検索が有効になっているかどうかを確認する
方法: データベース オブジェクトでセマンティック検索が有効になっているかどうかを確認する
データベースのセマンティック検索は有効ですか?
DATABASEPROPERTYEX (Transact-SQL) メタデータ関数の IsFullTextEnabled プロパティに対してクエリを実行します。
戻り値 1 は、データベースに対してフルテキスト検索とセマンティック検索が有効になっていることを示します。戻り値 0 は、有効になっていないことを示します。
SELECT DATABASEPROPERTYEX('database_name', 'IsFullTextEnabled')
GO
セマンティック検索はテーブルに対して有効になっていますか?
OBJECTPROPERTYEX (Transact-SQL) メタデータ関数の TableFullTextSemanticExtraction プロパティに対してクエリを実行します。
戻り値 1 は、セマンティック検索がテーブルに対して有効になっていることを示します。戻り値 0 は、有効になっていないことを示します。
SELECT OBJECTPROPERTYEX(OBJECT_ID('table_name'), 'TableFullTextSemanticExtraction')
GO
列のセマンティック検索は有効ですか?
特定の列に対してセマンティック検索が有効になっているかどうかを確認するには:
COLUMNPROPERTY (Transact-SQL) メタデータ関数の StatisticalSemantics プロパティに対してクエリを実行します。
戻り値 1 は、セマンティック検索が列に対して有効になっていることを示します。戻り値 0 は、有効になっていないことを示します。
SELECT COLUMNPROPERTY(OBJECT_ID('table_name'), 'column_name', 'StatisticalSemantics') GOフルテキスト インデックスのカタログ ビュー sys.fulltext_index_columns (Transact-SQL) に対してクエリを実行します。
statistical_semantics列の値 1 は、フルテキスト インデックス作成に加えて、指定した列がセマンティック インデックス作成に対して有効になっていることを示します。
SELECT * FROM sys.fulltext_index_columns WHERE object_id = OBJECT_ID('table_name') GOManagement Studio のオブジェクト エクスプローラーで、列を右クリックし、[ プロパティ] を選択します。 [列のプロパティ] ダイアログ ボックスの [全般] ページで、[統計セマンティクス] プロパティの値をオンにします。
値 True は、フルテキスト インデックス作成に加えて、指定した列がセマンティック インデックス作成に対して有効になっていることを示します。
セマンティック検索でインデックスを作成できる内容の決定
方法: セマンティック検索でサポートされている言語を確認する
重要
セマンティック インデックス作成でサポートされる言語は、フルテキスト インデックス作成よりも少なくなります。 その結果、フルテキスト検索用にインデックスを作成できるが、セマンティック検索ではインデックスを作成できない列が存在する可能性があります。
カタログ ビュー sys.fulltext_semantic_languages (Transact-SQL) に対してクエリを実行します。
SELECT * FROM sys.fulltext_semantic_languages
GO
セマンティック インデックス作成では、次の言語がサポートされています。 このリストは、LCID で並べ替えられたカタログ ビュー sys.fulltext_semantic_languages (Transact-SQL) の出力を表します。
| 言語 | ロケール識別子 |
|---|---|
| ドイツ語 | 1031 |
| 英語 (米国) | 1033 |
| フランス語 | 1036 |
| イタリア語 | 1040 |
| ポルトガル語 (ブラジル) | 1046 |
| ロシア語 | 1049 |
| スウェーデン語 | 1053 |
| 英語 (英国) | 2057 |
| ポルトガル語 (ポルトガル) | 2070 |
| スペイン語 | 3082 |
方法: インデックスを作成できるドキュメントの種類を決定する
カタログ ビュー sys.fulltext_document_types (Transact-SQL) に対してクエリを実行します。
インデックスを作成するドキュメントの種類がサポートされている種類の一覧にない場合は、追加のフィルターを検索、ダウンロード、インストールする必要があります。 詳細については、「 登録済みフィルターとワード ブレーカーの表示または変更」を参照してください。
ベスト プラクティス: Full-Text インデックスとセマンティック インデックス用に個別のファイル グループを作成することを検討する
ディスク領域の割り当てが問題である場合は、フルテキスト インデックスとセマンティック インデックス用に別のファイル グループを作成することを検討してください。 セマンティック インデックスは、フルテキスト インデックスと同じファイル グループに作成されます。 完全に設定されたセマンティック インデックスには、大量のデータが含まれている場合があります。
問題: 特定の列を検索しても結果が返されない
Unicode 以外の LCID が Unicode 言語に指定されましたか?
Unicode 以外の列型に対して、Unicode 単語のみを含む言語の LCID を使用してセマンティック インデックス作成を有効にできます (ロシア語の場合は LCID 1049 など)。 この場合、この列のセマンティック インデックスから結果が返されることはありません。