フルテキスト検索のアップグレード

適用対象:SQL ServerAzure SQL Database

SQL Server では、セットアップ中、または以前のバージョンの SQL Server からデータベース ファイルやフルテキスト カタログをアタッチ、復元、またはコピーするときのフルテキスト検索がアップグレードされます。

サーバー インスタンスをアップグレードする

インプレース アップグレードでは、SQL Server のインスタンスが SQL Server の旧バージョンとサイド バイ サイドでセットアップされ、データが移行されます。 旧バージョンの SQL Server にフルテキスト検索がインストールされている場合、新しいバージョンのフルテキスト検索が自動的にインストールされます。 サイド バイ サイド インストールとは、SQL Server のインスタンスごとに次のコンポーネントが存在することを意味します。

ワード ブレーカー、ステミング機能、フィルター
各インスタンスは、オペレーティング システムのバージョンと関係なく、固有のワード ブレーカー、ステミング機能、フィルターのセットを使用するようになりました。 これらのコンポーネントは、インスタンス レベルで簡単に登録し、構成できます。 詳細については、「 検索用のワード ブレーカーとステミング機能の構成と管理 」と「 検索用フィルターの構成と管理」を参照してください。

フィルター デーモン ホスト
フルテキスト フィルター デーモン ホストは、インデックスとクエリに使用する外部の拡張コンポーネント (ワード ブレーカー、ステミング機能、フィルターなど) を、Full-Text Engine の整合性を損なわずに安全に読み込み、駆動するプロセスです。 サーバー インスタンスでは、マルチスレッド フィルターに対してはすべてマルチスレッド処理が使用され、シングル スレッド フィルターに対してはすべてシングル スレッド処理が使用されます。

注意

SQL Server 2008 (10.0.x) では、FDHOST ランチャー サービス (MSSQLFDLauncher) のサービス アカウントが導入されました。 このサービスにより、SQL Server の特定インスタンスのフィルター デーモン ホスト プロセスに対してサービス アカウント情報が反映されます。 サービス アカウントの設定の詳細については、「 フルテキスト フィルター デーモン ランチャーのサービス アカウントの設定」を参照してください。

SQL Server 2005 (9.x) では、各フルテキスト インデックスは、ファイル グループに属するフルテキスト カタログに存在し、物理パスを持ち、データベース ファイルとして扱われます。 SQL Server 2008 (10.0.x) 以降のバージョンでは、フルテキスト カタログは、フルテキスト インデックスのグループを含んだ論理的 (仮想) オブジェクトです。 したがって、新しいフルテキスト カタログは、物理パスを持つデータベース ファイルとしては扱われません。 ただし、データ ファイルを含むフルテキスト カタログのアップグレード時に、新しいファイル グループが同じディスク上に作成されます。 これにより、アップグレード後も以前のディスク I/O 動作が維持されます。 ルート パスが存在する場合、そのカタログのフルテキスト インデックスは、すべて新しいファイル グループに配置されます。 前のフルテキスト カタログのパスが無効の場合、フルテキスト インデックスは、ベース テーブルと同じファイル グループで保持されるか、パーティション テーブルの場合にはプライマリ ファイル グループで保持されます。

フルテキスト アップグレード オプション

SQL Server インスタンスをアップグレードする場合、次のいずれかのフルテキスト アップグレード オプションをユーザー インターフェイスで選択できます。

[インポート]
フルテキスト カタログがインポートされます。 通常、インポートの方が再構築よりもかなり高速に処理されます。 たとえば、CPU を 1 つだけ使用している場合、インポートは、再構築の約 10 倍の速さで実行されます。 ただし、インポートされたフルテキスト カタログでは、SQL Server の最新バージョンでインストールされる新しいワード ブレーカーが使用されません。 クエリ結果の一貫性を維持するためには、フルテキスト カタログを再作成する必要があります。

注意

再構築はマルチスレッド モードで実行できます。10 を超える CPU が使用可能な場合に、再構築でそれらの CPU をすべて使用できるようにすると、再構築の方がインポートよりも高速に実行されることがあります。

フルテキスト カタログが使用できない場合は、関連付けられたフルテキスト インデックスが再構築されます。 このオプションは SQL Server 2005 (9.x) データベースでのみ使用できます。

フルテキスト インデックスのインポートによる影響については、後の「フルテキスト アップグレード オプションの選択に関する注意点」を参照してください。

リビルド
フルテキスト カタログは、導入された新しい拡張機能であるワード ブレーカーを使用して再構築されます。 インデックスの再構築には時間がかかり、アップグレード後に膨大な量の CPU とメモリが必要になる可能性があります。

リセット
フルテキスト カタログがリセットされます。 SQL Server 2005 (9.x) からアップグレードすると、フルテキスト カタログ ファイルは削除されますが、フルテキスト カタログとフルテキスト インデックスのメタデータは保持されます。 アップグレード後、すべてのフルテキスト インデックスで変更の追跡は無効化されており、クロールは自動的には開始されません。 アップグレードの完了後、手動で完全作成を実行するまで、カタログは空のままになります。

フルテキスト アップグレード オプションの選択に関する注意点

アップグレードのためにアップグレード オプションを選択する際は、次の点を考慮してください。

  • クエリ結果の一貫性が必要かどうか。

    SQL Server により、フルテキスト検索およびセマンティック検索に使用する新しいワード ブレーカーがインストールされます。 ワード ブレーカーは、インデックスの作成時とクエリ時の両方に使用されます。 フルテキスト カタログを再構築しない場合は、検索結果の一貫性が失われる可能性があります。 以前の SQL Server のバージョンワード ブレーカーと現在のワード ブレーカーで区切りが異なるフレーズを検索するフルテキスト クエリを発行すると、そのフレーズを含むドキュメントまたは行が検索されない場合があります。 これはインデックスされたフレーズがクエリとは異なるロジックで区切られたためです。 この問題を解決するには、新しいワード ブレーカーを使用してフルテキスト カタログを再作成 (再構築) し、インデックス時とクエリ時の動作が同一になるようにします。 これは [再構築] オプションを選択することによって実現できます。または、[インポート] オプションを選択した後で、手動で再構築することもできます。

  • 整数型のフルテキスト キー列に基づいて構築されているフルテキスト インデックスがあるかどうか。

    再構築では内部最適化処理が実行されます。これにより、アップグレードされたフルテキスト インデックスのクエリ パフォーマンスが向上することがあります。 具体的には、ベース テーブルのフルテキスト キー列が整数データ型であるフルテキスト インデックスを含むフルテキスト カタログがある場合、再構築によって、アップグレード後のフルテキスト クエリのパフォーマンスが理想的なものになります。 この場合は、 [再構築] オプションを使用することを強くお勧めします。

    注意

    フルテキスト インデックスでは、フルテキスト キーとして機能する列を整数データ型にすることをお勧めします。 詳細については、「 フルテキスト インデックスのパフォーマンスの向上」を参照してください。

  • サーバー インスタンスをオンラインにする場合に何を優先するか。

    アップグレード時のインポートまたは再構築では CPU リソースを大量に消費するので、その他のサーバー インスタンスがアップグレードされてオンラインになるのが遅れます。 できるだけ早くサーバー インスタンスをオンラインにすることが重要であり、アップグレード後に手動作成を実行してもよい場合は、 [リセット] が最適です。

フルテキスト インデックスをインポートした後にクエリ結果に不一致が生じないようにする

SQL Server 2005 (9.x) データベースのアップグレード時にフルテキスト カタログをインポートした場合、新旧のワード ブレーカーにおける動作の違いから、クエリとフルテキスト インデックスの内容との間に不一致が生じる可能性があります。 この場合、クエリとフルテキスト インデックスの内容を確実に完全一致させるためには、次のいずれかのオプションを選択します。

  • フルテキスト インデックスを含むフルテキスト カタログを再構築します (ALTER FULLTEXT CATALOGcatalog_name REBUILD)。

  • フルテキスト インデックスに FULL POPULATION を実行します (ALTER FULLTEXT INDEX ON table_name START FULL POPULATION)。

ワード ブレーカーの詳細については、「 検索用のワード ブレーカーとステミング機能の構成と管理」を参照してください。

ノイズワード ファイルからストップリストへのアップグレード

データベースが SQL Server 2005 (9.x) からアップグレードされると、ノイズ ワード ファイルは使用されなくなります。 ただし、古いノイズ ワード ファイルは FTDATA\ FTNoiseThesaurusBak フォルダーに保存され、後で対応する SQL Server ストップリストを更新または作成する際に使用できます。

SQL Server 2005 (9.x) からアップグレードした後:

  • SQL Server 2005 (9.x) のインストール時のノイズ ワード ファイルを追加、変更、または削除しなかった場合は、システム ストップリストでニーズが満たされます。

  • SQL Server 2005 (9.x) でノイズ ワード ファイルが変更された場合は、アップグレード時にその変更が失われます。 このような更新を再作成するには、対応する のストップリストで、これらの変更を手動で再作成する必要があります。 詳細については、「ALTER FULLTEXT STOPLIST (Transact-SQL)」を参照してください。

  • フルテキスト インデックスにストップワードを適用しない場合 (たとえば、SQL Server 2005 (9.x) のインストールでノイズ ワード ファイルを削除または消去した場合) は、アップグレードされたフルテキスト インデックスごとに、ストップリストを無効にする必要があります。 次の Transact-SQL ステートメントを実行します (database をアップグレードされたデータベースの名前に置き換え、tabletable の名前に置き換えます)。

    Use database;   
    ALTER FULLTEXT INDEX ON table  
       SET STOPLIST OFF;  
    GO  
    

    STOPLIST OFF 句は、ストップワードのフィルター処理を削除し、テーブル作成のトリガーとなります。このとき、ノイズと見なされたワードはフィルター処理されません。

バックアップとインポートされたフルテキスト カタログ

アップグレード時に再構築またはリセットされたフルテキスト カタログ (および新しいフルテキスト カタログ) は論理的概念であり、ファイル グループ内には存在しません。 そのため、フルテキスト カタログをバックアップするには、カタログのフルテキスト インデックスが含まれるファイル グループをすべて特定し、1 つずつバックアップする必要があります。 詳細については、「 フルテキスト カタログとフルテキスト インデックスのバックアップおよび復元」を参照してください。

SQL Server 2005 (9.x) からインポートされたフルテキスト カタログは、元のファイル グループ内のデータベース ファイルのままです。 SQL Server 2005 (9.x) のフルテキスト カタログのバックアップ プロセスは、MSFTESQL サービスが SQL Server に存在しないことを除き、引き続き適用されます。 SQL Server 2005 (9.x) におけるプロセスの詳細については、SQL Server 2005 オンライン ブックの「フルテキスト カタログのバックアップと復元」を参照してください。

データベースをアップグレードする際のフルテキスト インデックスの移行

以前のバージョンの SQL Server のデータベース ファイルおよびフルテキスト カタログは、アタッチ、復元、またはデータベース コピー ウィザードを使用して、既存のインスタンスにアップグレードできます。 SQL Server 2005 (9.x) のフルテキスト インデックスがある場合は、インポート、リセット、または再構築されます。 upgrade_option サーバー プロパティは、これらのデータベース アップグレード時にサーバー インスタンスで使用されるフルテキスト アップグレード オプションを制御します。

任意の SQL Server 2005 (9.x) データベースを新しいインスタンスに接続、復元、またはコピーすると、データベースはすぐに使用できるようになり、自動的にアップグレードされます。 インデックスを作成するデータ量によって、インポートには数時間、再構築には最大でその 10 倍の時間がかかることがあります。 なお、アップグレード オプションがインポートに設定されており、フルテキスト カタログが使用できない場合は、関連付けられたフルテキスト インデックスが再構築されます。

サーバー インスタンスでフルテキスト アップグレード動作を変更するには

SQL Server 2005 (9.x) フルテキスト カタログの復元に関する考慮事項

SQL Server 2005 (9.x) データベースのフルテキスト データをアップグレードする方法の 1 つは、データベースの完全バックアップを SQL Server の新しいインスタンスに復元することです。

SQL Server 2005 (9.x) フルテキスト カタログのインポート中に、データベースとカタログ ファイルをバックアップおよび復元できます。 動作は SQL Server 2005 (9.x) と同じです。

  • データベースの完全バックアップには、フルテキスト カタログが含まれます。 フルテキスト カタログを参照するには、SQL Server 2005 (9.x) のファイル名 sysft_+catalog-name を使用します。

  • フルテキスト カタログがオフラインの場合、バックアップは失敗します。

SQL Server 2005 (9.x) フルテキスト カタログのバックアップと復元の詳細については、SQL Server 2005 (9.x) Books Online の「フルテキスト カタログのバックアップと復元」および「ファイルのバックアップと復元とフルテキスト カタログ」を参照してください。

データベースを SQL Server の新しいインスタンスに復元すると、フルテキスト カタログ用の新しいデータベース ファイルが作成されます。 このファイルの既定の名前は、ftrow_catalog-name.ndf です。 たとえば、catalog-namecat1の場合、SQL Server データベース ファイルの既定の名前は ftrow_cat1.ndf となります。 ただし、作成先のディレクトリでこの既定の名前が既に使用されている場合は、新しいデータベース ファイルの名前は ftrow_catalog-name{GUID}.ndfとなります。 GUID は、新しいファイルのグローバル一意識別子です。

カタログのインポート後、 sys.database_filessys.master_filesが更新されてカタログ エントリが削除され、 sys.fulltext_catalogspath 列が NULL に設定されます。

データベースをバックアップするには

データベースのバックアップを復元するには

次の例では、RESTORE ステートメントの MOVE 句を使用して、ftdb1 という SQL Server 2005 (9.x) データベースを復元する方法を示しています。 SQL Server 2005 (9.x) のデータベース ファイル、ログ ファイル、およびカタログ ファイルは、SQL Server サーバー インスタンス上の新しい場所に、次のように移動されます。

  • データベース ファイル ftdb1.mdfC:\Program Files\Microsoft SQL Server\MSSQL.1MSSQL13.MSSQLSERVER\MSSQL\DATA\ftdb1.mdfに移動されます。

  • ログ ファイル ftdb1_log.ldfは、ログ ディスク ドライブ上のログ ディレクトリ log_drive:\log_directory\ftdb1_log.ldfに移動されます。

  • sysft_cat90 カタログに対応するカタログ ファイルは、 C:\tempに移動されます。 フルテキスト インデックスは、インポートされた後、データベース ファイル C:\ftrow_sysft_cat90.ndf 内に自動的に格納されます。C:\temp は削除されます。

RESTORE DATABASE [ftdb1] FROM  DISK = N'C:\temp\ftdb1.bak' WITH  FILE = 1,  
   MOVE N'ftdb1' TO N'C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\ftdb1.mdf',  
    MOVE N'ftdb1_log' TO N'log_drive:\log_directory\ftdb1_log.ldf',  
    MOVE N'sysft_cat90' TO N'C:\temp';  

SQL Server 2005 データベースのアタッチ

SQL Server 2008 (10.0.x) 以降のバージョンでは、フルテキスト カタログは、フルテキスト インデックスのグループを指す論理的概念です。 フルテキスト カタログは、ファイル グループに属さない仮想オブジェクトです。 ただし、フルテキスト カタログ ファイルを含む SQL Server 2005 (9.x) データベースを新しい SQL Server サーバー インスタンスにアタッチすると、 SQL Server 2005 (9.x) と同様に、カタログ ファイルは他のデータベース ファイルとともに以前の場所からアタッチされます。

SQL Server にアタッチされた各フルテキスト カタログの状態は、データベースが SQL Server 2005 (9.x) からデタッチされたときと同じです。 フルテキスト インデックスの作成がデタッチ操作により中断されていた場合、SQL Server でその作成が再開され、このフルテキスト インデックスがフルテキスト検索に使用できるようになります。

SQL Server がフルテキスト カタログ ファイルを見つけられない場合、またはアタッチ操作時に新しい場所を指定せずにフルテキスト ファイルが移動された場合、選択したフルテキスト アップグレード オプションによって動作が異なります。 フルテキスト アップグレード オプションが [インポート] または [再構築]の場合、アタッチされたフルテキスト カタログは再構築されます。 フルテキスト アップグレード オプションが [リセット] の場合、アタッチされたフルテキスト カタログはリセットされます。

データベースのデタッチとアタッチの詳細については、「データベースのデタッチとアタッチ (SQL Server)」、「CREATE DATABASE (SQL Server Transact-SQL)」、「sp_attach_db」、および「sp_detach_db (Transact-SQL)」を参照してください。

関連項目

フルテキスト検索の概要
検索用のワード ブレーカーとステミング機能の構成と管理
検索用フィルターの構成と管理