フルテキスト検索の概要Get Started with Full-Text Search

適用対象: ○SQL Server ○Azure SQL Database XAzure SQL Data Warehouse XParallel Data WarehouseAPPLIES TO: yesSQL Server yesAzure SQL Database noAzure SQL Data Warehouse noParallel Data Warehouse

SQL Server データベースでは、フルテキストが既定で有効になっています。SQL Server databases are full-text enabled by default. ただし、フルテキスト クエリを実行するには、事前にフルテキスト カタログを作成し、検索するテーブルまたはインデックス付きビューにフルテキスト インデックスを作成しておく必要があります。Before you can run full-text queries, however, you must create a full text catalog and create a full-text index on the tables or indexed views you want to search.

フルテキスト検索をセットアップする 2 つの手順Set up full-text search in two steps

フルテキスト検索をセットアップする基本的な手順は 2 つあります。There are two basic steps to set up full-text search:

  1. フルテキスト カタログを作成します。Create a full-text catalog.
  2. 検索するテーブルまたはインデックス付きビューにフルテキスト インデックスを作成します。Create a full-text index on tables or indexed view you want to search.

各フルテキスト インデックスは、フルテキスト カタログに属している必要があります。Each full-text index must belong to a full-text catalog. フルテキスト インデックスごとにテキスト カタログを作成するか、複数のフルテキスト インデックスを特定のカタログに関連付けることができます。You can create a separate text catalog for each full-text index, or you can associate multiple full-text indexes with a given catalog. フルテキスト カタログは仮想オブジェクトであり、ファイル グループには属しません。A full-text catalog is a virtual object and does not belong to any filegroup. カタログは、フルテキスト インデックスのグループを指す論理的概念です。The catalog is a logical concept that refers to a group of full-text indexes.

注意

これらの手順では、SQL Server のインストール時にオプションのフルテキスト検索コンポーネントをインストールしていると想定しています。These steps assume that you installed the optional Full-Text Search components when you installed SQL Server. インストールしていない場合は、SQL Server セットアップを再実行して追加する必要があります。If not, you have to run SQL Server Setup again to add them.

ウィザードでフルテキスト検索をセットアップするSet up full-text search with a wizard

ウィザードを使用してフルテキスト検索をセットアップする方法については、「Use the Full-Text Indexing Wizard」 (フルテキスト インデックス作成ウィザードの使用) を参照してください。To set up full-text search by using a wizard, see Use the Full-Text Indexing Wizard.

Transact-SQL でフルテキスト検索をセットアップするSet up full-text search with Transact-SQL

次の 2 部構成の例では、AdventureWorks サンプル データベースに AdvWksDocFTCat という名前のフルテキスト カタログを作成し、次に、サンプル データベースの Document テーブルにフルテキスト インデックスを作成します。The following two-part example creates a full-text catalog named AdvWksDocFTCat on the AdventureWorks sample database and then creates a full-text index on the Document table in the sample database. このステートメントによって、SQL Server のセットアップ時に指定した既定のディレクトリ内にフルテキスト カタログが作成されます。This statement creates the full-text catalog in the default directory specified during SQL Server setup. AdvWksDocFTCat というフォルダーが既定のディレクトリ内にあります。The folder named AdvWksDocFTCat is in the default directory.

  1. AdvWksDocFTCatという名前のフルテキスト カタログを作成するために、この例では、 CREATE FULLTEXT CATALOG ステートメントを使用します。To create a full-text catalog named AdvWksDocFTCat, the example uses a CREATE FULLTEXT CATALOG statement:

    USE AdventureWorks;  
    GO  
    CREATE FULLTEXT CATALOG AdvWksDocFTCat;  
    

    詳細については、「Create and Manage Full-Text Catalogs」 (フルテキスト インデックスの作成と管理) を参照してください。For more info, see Create and Manage Full-Text Catalogs.

  2. Document テーブルにフルテキスト インデックスを作成する前に、テーブルに一意の単一列で NULL 値にならないインデックスが含まれていることを確認します。Before you can create a full-text index on the Document table, ensure that the table has a unique, single-column, non-nullable index. 次の CREATE INDEX ステートメントでは、Document テーブルの DocumentID 列に、一意のインデックス ui_ukDocを作成します。The following CREATE INDEX statement creates a unique index, ui_ukDoc, on the DocumentID column of the Document table:

    CREATE UNIQUE INDEX ui_ukDoc ON Production.Document(DocumentID);  
    
  3. 一意のキーを作成したら、次の Document CREATE FULLTEXT INDEX ステートメントを使用して、 テーブルにフルテキスト インデックスを作成できます。After you have a unique key, you can create a full-text index on the Document table by using the following CREATE FULLTEXT INDEX statement.

    CREATE FULLTEXT INDEX ON Production.Document  
    (  
        Document                         --Full-text index column name   
            TYPE COLUMN FileExtension    --Name of column that contains file type information  
            Language 2057                 --2057 is the LCID for British English  
    )  
    KEY INDEX ui_ukDoc ON AdvWksDocFTCat --Unique index  
    WITH CHANGE_TRACKING AUTO            --Population type;  
    GO  
    
    

    この例で定義する TYPE COLUMN では、"Document" 列 (バイナリ型) の各行のドキュメント型が含まれる、テーブルの型列を指定します。The TYPE COLUMN defined in this example specifies the type column in the table that contains the type of the document in each row of the column 'Document' (which is of binary type). この型列には、特定の行のドキュメントのユーザー指定ファイル拡張子 (".doc"、".xls" など) が格納されます。The type column stores the user-supplied file extension - ".doc", ".xls", and so forth - of the document in a given row. Full-Text Engine では、特定の行のファイル拡張子を使用して、その行のデータを解析するために使用する正しいフィルターを呼び出します。The Full-Text Engine uses the file extension in a given row to invoke the correct filter to use for parsing the data in that row. フィルターで行のバイナリ データが解析された後は、指定したワード ブレーカーで内容が解析されます After the filter has parsed the binary data of the row, the specified word breaker parses the content. (この例では、英語 (英国) のワード ブレーカーが使用されます)。詳細については、「 検索用フィルターの構成と管理」を参照してください。(In this example, the word breaker for British English is used.) For more information, see Configure and Manage Filters for Search.

    詳細については、「Create and Manage Full-Text Indexes」 (フルテキスト インデックスの作成と管理) を参照してください。For more info, see Create and Manage Full-Text Indexes.

フルテキスト インデックスのオプションの選択Choose options for a full-text index

言語の選択Choose a language

列の言語の選択については、「 フルテキスト インデックス作成時の言語の選択」をご覧ください。For information about choosing the column language, see Choose a Language When Creating a Full-Text Index.

ファイルグループの選択Choose a filegroup

フルテキスト インデックスを構築するプロセスでは、大量の I/O が発生します。The process of building a full-text index is fairly I/O intensive. 要約すると、SQL ServerSQL Server のデータの読み取りと、フィルター処理されたデータのフルテキスト インデックスへの反映で構成されます。In summary, it consists of reading data from SQL ServerSQL Server, and then propagating the filtered data to the full-text index. I/O パフォーマンスの最大化に最適なデータベース ファイル グループにフルテキスト インデックスを配置するか、他のボリュームの別のファイル グループにフルテキスト インデックスを配置することをお勧めします。As a best practice, locate a full-text index in the database filegroup that is best for maximizing I/O performance or locate the full-text indexes in a different filegroup on another volume.

フルテキスト カタログの選択Choose a full-text catalog

変更が少ないテーブル、変更が多いテーブル、または特定の時間帯に頻繁に変更されるテーブルなど、同じ更新特性を持つテーブルは、同じフルテキスト カタログの下にまとめて関連付けることをお勧めします。We recommend associating tables with the same update characteristics (such as small number of changes versus large number of changes, or tables that change frequently during a particular time of day) together under the same full-text catalog. フルテキスト カタログの作成スケジュールをセットアップすると、データベースの利用率が高いときでもデータベース サーバーのリソース使用に大きな影響を及ぼすことなく、フルテキスト インデックスとテーブルの同期が維持されるようになります。By setting up full-text catalog population schedules, full-text indexes stay synchronous with the tables without adversely affecting the resource usage of the database server during periods of high database activity.

次のガイドラインを考慮してください。Consider the following guidelines:

  • 数百万の行を持つテーブルにインデックスを作成する場合は、そのテーブル専用のフルテキスト カタログを割り当ててください。If you are indexing a table with millions of rows, assign the table to its own full-text catalog.

  • フルテキスト インデックスを作成するテーブル内の変更量だけではなく、そのテーブル内の行の総数についても考慮してください。Consider the amount of change occurring in the tables being full-text indexed, as well as the total number of rows. 変更される行と、最後にフルテキスト インデックスを作成したときにテーブル内に存在した行の総数が数百万行に及ぶ場合は、そのテーブルを専用のフルテキスト カタログに割り当ててください。If the total number of rows being changed, together with the number of rows in the table present during the last full-text population, represents millions of rows, assign the table to its own full-text catalog.

一意のインデックスを関連付けるAssociate a unique index

常に、一意なフルテキスト キーに利用可能な最小の一意なインデックスを選択してください。Always select the smallest unique index available for your full-text unique key. 4 バイトで、整数ベースのインデックスが最適です。これにより、ファイル システム内の MicrosoftMicrosoft Search サービスで必要となるリソースが大幅に減少します。(A 4-byte, integer-based index is optimal.) This significantly reduces the resources required by MicrosoftMicrosoft Search service in the file system. 主キーが大きい場合 (100 バイト以上)、テーブル内の他の一意なインデックスを選択するか、または他の一意なインデックスを作成して、フルテキスト インデックス用のキーにすることを検討してください。If the primary key is large (over 100 bytes), consider choosing another unique index in the table (or creating another unique index) as the full-text unique key. そうしないと、一意なフルテキスト キーのサイズが最大サイズ (900 バイト) を超えた場合、フルテキストの作成を続行できなくなります。Otherwise, if the full-text unique key size exceeds the maximum size allowed (900 bytes), full-text population will not be able to proceed.

ストップリストを関連付けるAssociate a stoplist

ストップリスト は、ストップワード (ノイズ ワードとも呼ばれます) の一覧です。A stoplist is a list of stopwords, also known as noise words. ストップリストは各フルテキスト インデックスに関連付けられ、そのストップリスト内の単語がそのインデックスのフルテキスト クエリに適用されます。A stoplist is associated with each full-text index, and the words in that stoplist are applied to full-text queries on that index. 既定では、システム ストップリストは、新しいフルテキスト インデックスに関連付けられます。By default, the system stoplist is associated with a new full-text index. 独自のストップリストを作成して使用することもできます。You can create and use your own stoplist too.

たとえば、次の CREATE FULLTEXT STOPLIST Transact-SQLTransact-SQL ステートメントでは、システム ストップリストからコピーして、myStoplist という名前の新しいフルテキスト ストップリストを作成します。For example, the following CREATE FULLTEXT STOPLIST Transact-SQLTransact-SQL statement creates a new full-text stoplist named myStoplist by copying from the system stoplist:

CREATE FULLTEXT STOPLIST myStoplist FROM SYSTEM STOPLIST;  
GO  

次の ALTER FULLTEXT STOPLIST Transact-SQLTransact-SQL ステートメントでは、myStoplist という名前のストップリストを変更して、単語 'en' をまずスペイン語用に、次にフランス語用に追加します。The following ALTER FULLTEXT STOPLIST Transact-SQLTransact-SQL statement alters a stoplist named myStoplist, adding the word 'en', first for Spanish and then for French:

ALTER FULLTEXT STOPLIST myStoplist ADD 'en' LANGUAGE 'Spanish';  
ALTER FULLTEXT STOPLIST myStoplist ADD 'en' LANGUAGE 'French';  
GO  

詳細については、「 フルテキスト検索に使用するストップワードとストップリストの構成と管理」を参照してください。For more information, see Configure and Manage Stopwords and Stoplists for Full-Text Search.

フルテキスト インデックスを更新するUpdate a full-text index

標準の SQL ServerSQL Server インデックスと同様に、フルテキスト インデックスは、関連付けられたテーブルの中でデータが変更されると、自動的に更新されます。Like regular SQL ServerSQL Server indexes, full-text indexes can be automatically updated as data is modified in the associated tables. これは既定の動作です。This is the default behavior. 指定したスケジュール間隔または手動でフルテキスト インデックスを最新の状態に保つこともできます。Alternatively, you can keep your full-text indexes up-to-date manually, or at specified scheduled intervals. フルテキスト インデックスの作成には時間がかかり、リソースが大量に消費される可能性があります。Populating a full-text index can be time-consuming and resource-intensive. そのため、インデックスの更新は、通常、非同期プロセスで実行します。この非同期プロセスは、バックグラウンドで実行され、ベース テーブルの変更後にフルテキスト インデックスを最新の状態に維持します。Therefore, index updating is usually performed as an asynchronous process that runs in the background and keeps the full-text index up to date after modifications in the base table.

ベース テーブルのそれぞれの変更後すぐにフルテキスト インデックスを更新した場合にも、リソースが大量に消費されます。Updating a full-text index immediately after each change in the base table is also resource-intensive. そのため、更新、挿入、または削除の率が高い場合は、クエリのパフォーマンスが低下する可能性があります。Therefore, if you have a high update/insert/delete rate, you may experience some degradation in query performance. この問題が発生した場合、リソースについてクエリと競合しないよう、手動による変更追跡の更新をスケジュール設定して、適宜、大量の変更に対応することを検討してください。If this occurs, consider scheduling manual change tracking updates to keep up with the numerous changes from time to time, rather than competing with queries for resources.

詳細については、「Populate Full-Text Indexes」 (フルテキスト インデックスの作成) を参照してください。For more info, see Populate Full-Text Indexes.

次の手順Next steps

SQL Server フルテキスト検索をセットアップすると、フルテキスト クエリを実行できます。After you set up SQL Server Full-Text Search, you're ready to run full-text queries. 詳細については、「Query with Full-Text Search」 (フルテキスト検索でのクエリ) を参照してください。For more info, see Query with Full-Text Search.