次の方法で共有


テーブルと列のセマンティック検索を有効にする

ドキュメントまたはテキストを含む選択した列の統計セマンティック インデックス作成を有効または無効にする方法について説明します。

統計セマンティック検索では、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 テーブルの TitleDocumentSummaryおよび 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')  
    GO  
    
  • Management 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 など)。 この場合、この列のセマンティック インデックスから結果が返されることはありません。