フルテキスト検索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 ServerSQL Server および Azure SQL データベースAzure SQL Database のフルテキスト検索は、ユーザーおよびアプリケーションが SQL ServerSQL Server テーブルの文字ベースのデータに対してフルテキスト クエリを実行できるようにします。Full-Text Search in SQL ServerSQL Server and Azure SQL データベースAzure SQL Database lets users and applications run full-text queries against character-based data in SQL ServerSQL Server tables.

基本的なタスクBasic tasks

このトピックでは、フルテキスト検索の概要とそのコンポーネントおよびアーキテクチャについて説明します。This topic provides an overview of Full-Text Search and describes its components and its architecture. すぐに使い始めたい場合は、この基本的なタスクを参照してください。If you prefer to get started right away, here are the basic tasks.

注意

Full-Text Search is an optional component of the SQL ServerSQL Server データベース エンジンのオプションのコンポーネントです。Full-Text Search is an optional component of the SQL ServerSQL Server Database Engine. SQL Server をインストールしたときにフルテキスト検索を選択しなかった場合は、SQL Server セットアップを再実行して追加します。If you didn't select Full-Text Search when you installed SQL Server, run SQL Server Setup again to add it.

概要Overview

フルテキスト インデックスには、テーブルの 1 つ以上の文字ベースの列が含まれます。A full-text index includes one or more character-based columns in a table. これらの列のデータ型は、charvarcharncharnvarchartextntextimagexml、または varbinary (max) のいずれかおよび FILESTREAM です。These columns can have any of the following data types: char, varchar, nchar, nvarchar, text, ntext, image, xml, or varbinary(max) and FILESTREAM. 各フルテキスト インデックスによってテーブルの 1 つ以上の列にインデックスが設定され、列ごとに特定の言語を使用できます。Each full-text index indexes one or more columns from the table, and each column can use a specific language.

フルテキスト クエリでは、英語や日本語などの特定の言語の規則に基づいて語や句を操作することにより、フルテキスト インデックス内のテキスト データに対して言語検索を実行できます。Full-text queries perform linguistic searches against text data in full-text indexes by operating on words and phrases based on the rules of a particular language such as English or Japanese. フルテキスト クエリには、単純な語や句、または複数の形式の語や句を含めることができます。Full-text queries can include simple words and phrases or multiple forms of a word or phrase. フルテキスト クエリでは、1 つ以上の一致 ( ヒットとも呼ばれます) が含まれているすべてのドキュメントが返されます。A full-text query returns any documents that contain at least one match (also known as a hit). 一致は、フルテキスト クエリに指定されたすべての語句が対象のドキュメントに含まれていて、その他の検索条件 (一致する語句間の距離など) を満たしているときに、発生します。A match occurs when a target document contains all the terms specified in the full-text query, and meets any other search conditions, such as the distance between the matching terms.

フルテキスト検索クエリFull-Text Search queries

フルテキスト インデックスに列が追加されると、ユーザーとアプリケーションはその列のテキストに対してフルテキスト クエリを実行できるようになります。After columns have been added to a full-text index, users and applications can run full-text queries on the text in the columns. クエリで検索できる対象は次のとおりです。These queries can search for any of the following:

  • 1 つ以上の語または句 (単純語句)One or more specific words or phrases (simple term)

  • 指定したテキストで始まる語または句 (プレフィックス語句)A word or a phrase where the words begin with specified text (prefix term)

  • 特定の語の変化形 (生成語)Inflectional forms of a specific word (generation term)

  • 他の語または句に近接する語または句 (近接語句)A word or phrase close to another word or phrase (proximity term)

  • 特定の語のシノニム形 (類義語)Synonymous forms of a specific word (thesaurus)

  • 重み付け値を使用している語または句 (重み付け語句)Words or phrases using weighted values (weighted term)

フルテキスト クエリでは大文字と小文字は区別されません。Full-text queries are not case-sensitive. たとえば、"Aluminum" を検索した場合と "aluminum" を検索した場合では、同じ結果が返されます。For example, searching for "Aluminum" or "aluminum" returns the same results.

フルテキスト クエリでは、少数の Transact-SQLTransact-SQL 述語 (CONTAINS と FREETEXT) および関数 (CONTAINSTABLE と FREETEXTTABLE) が使用されます。Full-text queries use a small set of Transact-SQLTransact-SQL predicates (CONTAINS and FREETEXT) and functions (CONTAINSTABLE and FREETEXTTABLE). ただし、ビジネス シナリオの検索目的によってフルテキスト クエリの構造は異なります。However, the search goals of a given business scenario influence the structure of the full-text queries. 例 :For example:

  • e ビジネス - Web サイト上で製品を検索する場合:e-business-searching for a product on a website:

    SELECT product_id   
    FROM products   
    WHERE CONTAINS(product_description, "Snap Happy 100EZ" OR FORMSOF(THESAURUS,'Snap Happy') OR '100EZ')   
    AND product_cost < 200 ;  
    
  • 人員採用のシナリオ - SQL ServerSQL Server の使用経験を持つ候補者を検索する場合:Recruitment scenario-searching for job candidates that have experience working with SQL ServerSQL Server:

    SELECT candidate_name,SSN   
    FROM candidates   
    WHERE CONTAINS(candidate_resume,"SQL Server") AND candidate_division =DBA;  
    

詳細については、「 フルテキスト検索でのクエリ」を参照してください。For more information, see Query with Full-Text Search.

フルテキスト検索クエリと LIKE 述語の比較Compare Full-Text Search queries to the LIKE predicate

フルテキスト検索とは異なり、 LIKE Transact-SQLTransact-SQL 述語は、文字パターンにのみで動作します。In contrast to full-text search, the LIKE Transact-SQLTransact-SQL predicate works on character patterns only. また、フォーマットされたバイナリ データのクエリには LIKE 述語を使用できません。Also, you cannot use the LIKE predicate to query formatted binary data. さらに、構造化されていない大量のテキスト データに対して LIKE クエリを実行すると、同じデータに対して同等のフルテキスト検索を実行する場合に比べてはるかに時間がかかります。Furthermore, a LIKE query against a large amount of unstructured text data is much slower than an equivalent full-text query against the same data. 数百万行のテキスト データに対して LIKE クエリを実行すると、結果が得られるまでに数分かかる場合があります。一方、同じデータに対してフルテキスト クエリを実行すると、返される行数にもよりますが、数秒以内で結果を取得できます。A LIKE query against millions of rows of text data can take minutes to return; whereas a full-text query can take only seconds or less against the same data, depending on the number of rows that are returned.

フルテキスト検索のアーキテクチャFull-Text Search architecture

フルテキスト検索のアーキテクチャは、次のプロセスで構成されています。Full-text search architecture consists of the following processes:

  • SQL ServerSQL Server プロセス (sqlservr.exe)。The SQL ServerSQL Server process (sqlservr.exe).

  • フィルター デーモン ホスト プロセス (fdhost.exe)。The filter daemon host process (fdhost.exe).

    セキュリティ上の理由から、フィルターはフィルター デーモン ホストと呼ばれる個別のプロセスによって読み込まれます。For security reasons, filters are loaded by separate processes called the filter daemon hosts. fdhost.exe プロセスは、FDHOST ランチャー サービス (MSSQLFDLauncher) によって作成され、FDHOST ランチャー サービス アカウントのセキュリティ資格情報を基に実行されます。The fdhost.exe processes are created by an FDHOST launcher service (MSSQLFDLauncher), and they run under the security credentials of the FDHOST launcher service account. そのため、フルテキスト インデックスやフルテキスト クエリを使用する場合は、FDHOST ランチャー サービスが実行されている必要があります。Therefore, the FDHOST launcher service must be running for full-text indexing and full-text querying to work. このサービスのサービス アカウントの設定の詳細については、「 フルテキスト フィルター デーモン ランチャーのサービス アカウントの設定」を参照してください。For information about setting the service account for this service, see Set the Service Account for the Full-text Filter Daemon Launcher.

この 2 つのプロセスには、フルテキスト検索のアーキテクチャのコンポーネントが含まれます。These two processes contain the components of the full-text search architecture. 次の図は、各コンポーネントとその関係をまとめたものです。These components and their relationships are summarized in the following illustration. 図の後で、各コンポーネントについて説明します。The components are described after the illustration.

フルテキスト検索のアーキテクチャfull-text search architecture

SQL Server プロセスSQL Server process

SQL ServerSQL Server プロセスでは、フルテキスト検索に次のコンポーネントが使用されます。The SQL ServerSQL Server process uses the following components for full-text search:

  • ユーザー テーブル。User tables. これらのテーブルには、フルテキスト インデックスを作成する対象のデータが格納されます。These tables contain the data to be full-text indexed.

  • フルテキスト Gatherer。Full-text gatherer. フルテキスト Gatherer は、フルテキスト クロール スレッドと連携して動作します。The full-text gatherer works with the full-text crawl threads. このコンポーネントは、フルテキスト インデックス作成のスケジュール設定や実行、およびフルテキスト カタログの監視を行います。It is responsible for scheduling and driving the population of full-text indexes, and also for monitoring full-text catalogs.

  • 類義語辞典ファイル。Thesaurus files. このファイルには、検索語句のシノニムが含まれています。These files contain synonyms of search terms. 詳細については、「 フルテキスト検索に使用する類義語辞典ファイルの構成と管理」を参照してください。For more information, see Configure and Manage Thesaurus Files for Full-Text Search.

  • ストップリスト オブジェクト。Stoplist objects. ストップリスト オブジェクトには、頻繁に出現する、検索に不要な語の一覧が含まれています。Stoplist objects contain a list of common words that are not useful for the search. 詳細については、「 フルテキスト検索に使用するストップワードとストップリストの構成と管理」を参照してください。For more information, see Configure and Manage Stopwords and Stoplists for Full-Text Search.

  • SQL ServerSQL Server クエリ プロセッサ。SQL ServerSQL Server query processor. クエリ プロセッサは、SQL クエリをコンパイルして実行します。The query processor compiles and executes SQL queries. SQL クエリにフルテキスト検索クエリが含まれる場合、コンパイル時と実行時にクエリが Full-Text Engine に送信されます。If a SQL query includes a full-text search query, the query is sent to the Full-Text Engine, both during compilation and during execution. クエリ結果は、フルテキスト インデックスと照合されます。The query result is matched against the full-text index.

  • Full-Text Engine。Full-Text Engine. SQL ServerSQL Server の Full-Text Engine は、クエリ プロセッサと完全に統合されています。The Full-Text Engine in SQL ServerSQL Server is fully integrated with the query processor. Full-Text Engine は、フルテキスト クエリをコンパイルして実行します。The Full-Text Engine compiles and executes full-text queries. クエリの実行の一環として、Full-Text Engine が類義語辞典とストップリストから入力を受け取る場合があります。As part of query execution, the Full-Text Engine might receive input from the thesaurus and stoplist.

    注意

    SQL Server 2008:SQL Server 2008 以降では、Full-Text Engine は、個別のサービスではなく SQL ServerSQL Server プロセス内に存在します。In SQL Server 2008:SQL Server 2008 and later versions, the Full-Text Engine resides in the SQL ServerSQL Server process, rather than in a separate service. Full-Text Engine をデータベース エンジンに統合することにより、フルテキストの管理、混合クエリの最適化、および全体的なパフォーマンスが向上しています。Integrating the Full-Text Engine into the Database Engine improved full-text manageability, optimization of mixed query, and overall performance.

  • インデックス ライター (インデクサー)。Index writer (indexer). インデックス ライターは、インデックスが作成されたトークンの保存に使用される構造を構築します。The index writer builds the structure that is used to store the indexed tokens.

  • フィルター デーモン マネージャー。Filter daemon manager. フィルター デーモン マネージャーは、Full-Text Engine フィルター デーモン ホストの状態を監視します。The filter daemon manager is responsible for monitoring the status of the Full-Text Engine filter daemon host.

Filter Daemon Host processFilter Daemon Host process

フィルター デーモン ホストは、Full-Text Engine によって起動されるプロセスです。The filter daemon host is a process that is started by the Full-Text Engine. このプロセスでは、次に示されているフルテキスト検索コンポーネントが実行されます。これらのコンポーネントは、テーブルのデータにアクセスしたりフィルターを適用したり、データを単語に区切ったりします。また、クエリ入力の単語区切りやステミングを行います。It runs the following full-text search components, which are responsible for accessing, filtering, and word breaking data from tables, as well as for word breaking and stemming the query input.

フィルター デーモン ホストのコンポーネントは次のとおりです。The components of the filter daemon host are as follows:

  • プロトコル ハンドラー。Protocol handler. このコンポーネントは、メモリからデータを取り出して追加処理を行ったり、指定されたデータベースのユーザー テーブルのデータにアクセスしたりします。This component pulls the data from memory for further processing and accesses data from a user table in a specified database. このコンポーネントの役割の 1 つは、フルテキスト インデックスが設定された列からデータを収集し、フィルター デーモン ホストに渡すことです。その後にフィルター デーモン ホストで、必要に応じてフィルターやワード ブレーカーが適用されます。One of its responsibilities is to gather data from the columns being full-text indexed and pass it to the filter daemon host, which will apply filtering and word breaker as required.

  • フィルター。Filters. 一部のデータ型では、ドキュメント内のデータにフルテキスト インデックスを設定する前にフィルター処理が必要になります。 varbinaryvarbinary(max)imagexml 列のデータなどです。Some data types require filtering before the data in a document can be full-text indexed, including data in varbinary, varbinary(max), image, or xml columns. 特定のドキュメントで使用されるフィルターは、そのドキュメント型によって異なります。The filter used for a given document depends on its document type. たとえば、Microsoft Word (.doc) 文書、Microsoft Excel (.xls) ドキュメント、および XML (.xml) ドキュメントでは、それぞれ異なるフィルターが使用されます。For example, different filters are used for Microsoft Word (.doc) documents, Microsoft Excel (.xls) documents, and XML (.xml) documents. フィルターは、ドキュメントからテキストのチャンクを抽出し、埋め込みの書式設定を削除してテキストを保持します。場合によっては、テキストの位置に関する情報も保持されます。Then the filter extracts chunks of text from the document, removing embedded formatting and retaining the text and, potentially, information about the position of the text. 結果は、テキスト情報のストリームになります。The result is a stream of textual information. 詳細については、「 検索用フィルターの構成と管理」を参照してください。For more information, see Configure and Manage Filters for Search.

  • ワード ブレーカーとステミング機能。Word breakers and stemmers. ワード ブレーカーは、特定の言語の語彙の規則に基づいて単語の境界を検出する言語固有のコンポーネントです (単語区切り)。A word breaker is a language-specific component that finds word boundaries based on the lexical rules of a given language (word breaking). 各ワード ブレーカーには、動詞を活用して変化形の拡張を行う言語固有のステミング機能コンポーネントが関連付けられています。Each word breaker is associated with a language-specific stemmer component that conjugates verbs and performs inflectional expansions. インデックスの作成時、フィルター デーモン ホストでは、ワード ブレーカーとステミング機能を使用して特定のテーブル列のテキスト データに関する言語分析を実行します。At indexing time, the filter daemon host uses a word breaker and stemmer to perform linguistic analysis on the textual data from a given table column. 列のインデックス作成に使用されるワード ブレーカーとステミング機能は、フルテキスト インデックスのテーブル列に関連付けられた言語によって決まります。The language that is associated with a table column in the full-text index determines which word breaker and stemmer are used for indexing the column. 詳細については、「 検索用のワード ブレーカーとステミング機能の構成と管理」を参照してください。For more information, see Configure and Manage Word Breakers and Stemmers for Search.

フルテキスト検索処理Full-Text Search processing

フルテキスト検索は Full-Text Engine によって実行されます。Full-text search is powered by the Full-Text Engine. Full-Text Engine にはインデックス作成サポートとクエリ サポートの 2 つの役割があります。The Full-Text Engine has two roles: indexing support and querying support.

フルテキスト インデックス作成のプロセスFull-Text indexing process

フルテキスト作成 (クロールとも呼ばれます) を開始すると、Full-Text Engine は大きなデータをバッチでメモリにプッシュして、フィルター デーモン ホストに通知します。When a full-text population (also known as a crawl) is initiated, the Full-Text Engine pushes large batches of data into memory and notifies the filter daemon host. フィルター デーモン ホストは、データをフィルター処理してから分解し、逆単語リストに変換します。The host filters and word breaks the data and converts the converted data into inverted word lists. 次にフルテキスト検索が、変換されたデータを単語リストからプルし、データを処理してストップワードを削除し、バッチ用の単語リストを 1 つ以上の逆インデックスに保持します。The full-text search then pulls the converted data from the word lists, processes the data to remove stopwords, and persists the word lists for a batch into one or more inverted indexes.

varbinary(max) 型または image 型の列に格納されたデータにインデックスを作成する場合には、 IFilter インターフェイスを実装するフィルターが、そのデータに指定されたファイル フォーマット ( MicrosoftMicrosoft Word など) に基づいてテキストを抽出します。When indexing data stored in a varbinary(max) or image column, the filter, which implements the IFilter interface, extracts text based on the specified file format for that data (for example, MicrosoftMicrosoft Word). 場合によっては、フィルター コンポーネントは varbinary(max) 型または image 型のデータを filterdata フォルダーに書き込む必要があります。この場合、メモリへのプッシュは行われません。In some cases, the filter components require the varbinary(max), or image data to be written out to the filterdata folder, instead of being pushed into memory.

一連の処理の中で、生成されたテキスト データがワード ブレーカーに渡され、そこで個々のトークンまたはキーワードに分解されます。As part of processing, the gathered text data is passed through a word breaker to separate the text into individual tokens, or keywords. トークン化に使用する言語は列レベルで指定するか、 varbinary(max) 型、 image型、または xml 型データのいずれかからフィルター コンポーネントによって識別されます。The language used for tokenization is specified at the column level, or can be identified within varbinary(max), image, or xml data by the filter component.

この後、追加の処理によってストップワードが削除され、トークンが正規化されて、フルテキスト インデックスまたはインデックス フラグメントに格納されます。Additional processing may be performed to remove stopwords, and to normalize tokens before they are stored in the full-text index or an index fragment.

作成が完了すると、最終的なマージ プロセスが起動され、インデックス フラグメントが 1 つのマスター フルテキスト インデックスにマージされます。When a population has completed, a final merge process is triggered that merges the index fragments together into one master full-text index. これにより、多数のインデックス フラグメントではなく、1 つのマスター インデックスのみをクエリすれば済むため、クエリのパフォーマンスが向上し、関連順位付けにもより的確なスコア (評価) 統計を適用できます。This results in improved query performance since only the master index needs to be queried rather than a number of index fragments, and better scoring statistics may be used for relevance ranking.

フルテキスト クエリのプロセスFull-Text querying process

クエリ プロセッサは、処理を行うためにクエリのフルテキストの一部を Full-Text Engine に送ります。The query processor passes the full-text portions of a query to the Full-Text Engine for processing. Full-Text Engine は、単語区切りと、必要に応じて、類義語の拡張、語幹への分割、ストップワード (ノイズ ワード) の処理を実行します。The Full-Text Engine performs word breaking and, optionally, thesaurus expansions, stemming, and stopword (noise-word) processing. 次に、クエリのフルテキストの一部を SQL 演算子の形式で、主にストリーミング テーブル値関数 (STVF) として表現します。Then the full-text portions of the query are represented in the form of SQL operators, primarily as streaming table-valued functions (STVFs). クエリの実行中、STVF は正しい結果を取り出すために逆インデックスにアクセスします。During query execution, these STVFs access the inverted index to retrieve the correct results. 結果は、この時点でクライアントに戻されるか、さらに処理を加えてからクライアントに戻されます。The results are either returned to the client at this point, or they are further processed before being returned to the client.

フルテキスト インデックスのアーキテクチャFull-text index architecture

フルテキスト インデックスの情報は、特定の単語や単語の組み合わせをすばやく検索できるフルテキスト クエリをコンパイルするために Full-Text Engine で使用されます。The information in full-text indexes is used by the Full-Text Engine to compile full-text queries that can quickly search a table for particular words or combinations of words. フルテキスト インデックスには、データベース テーブルの 1 つ以上の列の重要な語およびその場所に関する情報が保存されます。A full-text index stores information about significant words and their location within one or more columns of a database table. フルテキスト インデックスは、Full-Text Engine for SQL ServerSQL Serverにより構築および管理されるトークンベースの特殊な機能インデックスです。A full-text index is a special type of token-based functional index that is built and maintained by the Full-Text Engine for SQL ServerSQL Server. フルテキスト インデックスの作成手順は、他のタイプのインデックスの作成手順とは異なります。The process of building a full-text index differs from building other types of indexes. 特定の行に格納された値に基づいて B ツリー構造を作成するのではなく、Full-Text Engine は、インデックスを作成するテキストの個々のトークンに基づいて、反転、スタック、および圧縮されたインデックス構造を作成します。Instead of constructing a B-tree structure based on a value stored in a particular row, the Full-Text Engine builds an inverted, stacked, compressed index structure based on individual tokens from the text being indexed. フルテキスト インデックスのサイズを制限する要因となるのは、 SQL ServerSQL Server のインスタンスが実行されているコンピューターで使用できるメモリ リソースのみです。The size of a full-text index is limited only by the available memory resources of the computer on which the instance of SQL ServerSQL Server is running.

SQL Server 2008:SQL Server 2008以降では、フルテキスト インデックスはデータベース エンジンと統合されており、以前のバージョンの SQL ServerSQL Serverのようにファイル システムには格納されません。Beginning in SQL Server 2008:SQL Server 2008, the full-text indexes are integrated with the Database Engine, instead of residing in the file system as in previous versions of SQL ServerSQL Server. 新しいデータベースでは、フルテキスト カタログは、ファイル グループに属さない仮想オブジェクトです。これは、フルテキスト インデックスのグループを指す論理的概念に過ぎません。For a new database, the full-text catalog is now a virtual object that does not belong to any filegroup; it is merely a logical concept that refers to a group of the full-text indexes. ただし、 SQL Server 2005SQL Server 2005 データベースをアップグレードする場合は、データ ファイルを含むフルテキスト カタログの新しいファイル グループが作成されます。詳細については、「 フルテキスト検索のアップグレード」を参照してください。Note, however, that during upgrade of a SQL Server 2005SQL Server 2005 database, any full-text catalog that contains data files, a new filegroup is created; for more information, see Upgrade Full-Text Search.

1 つのテーブルに対し、1 つのフルテキスト インデックスしか使用できません。Only one full-text index is allowed per table. フルテキスト インデックスをテーブルに作成するためには、一意で NULL が許容されない列がそのテーブルに 1 つ必要です。For a full-text index to be created on a table, the table must have a single, unique nonnull column. フルテキスト インデックスを作成できるのは、データ型が charvarcharncharnvarchartextntextimagexmlvarbinaryおよび varbinary(max) の列です。これらの列には、フルテキスト検索用のインデックスを作成できます。You can build a full-text index on columns of type char, varchar, nchar, nvarchar, text, ntext, image, xml, varbinary, and varbinary(max) can be indexed for full-text search. データ型が varbinaryvarbinary(max)image、または xml の列にフルテキスト インデックスを作成する場合は、型列を指定する必要があります。Creating a full-text index on a column whose data type is varbinary, varbinary(max), image, or xml requires that you specify a type column. 型列 は、各行のドキュメントのファイル拡張子 (.doc、.pdf、.xls など) を格納するテーブル列です。A type column is a table column in which you store the file extension (.doc, .pdf, .xls, and so forth) of the document in each row.

フルテキスト インデックスの構造Full-text index structure

フルテキスト インデックスの構造をよく理解しておくことは、Full-Text Engine の動作を理解するのに役立ちます。A good understanding of the structure of a full-text index will help you understand how the Full-Text Engine works. このトピックでは、 Document Adventure WorksAdventure Works テーブルの抜粋をテーブル例として使用します。This topic uses the following excerpt of the Document table in Adventure WorksAdventure Works as an example table. この抜粋には、テーブルの 2 つの列 ( DocumentID 列および Title 列) と 3 つの行のみが含まれています。This excerpt shows only two columns, the DocumentID column and the Title column, and three rows from the table.

この例では、 Title 列に対してフルテキスト インデックスが作成されているものとします。For this example, we will assume that a full-text index has been created on the Title column.

DocumentIDDocumentID [タイトル]Title
11 Crank Arm and Tire MaintenanceCrank Arm and Tire Maintenance
22 Front Reflector Bracket and Reflector Assembly 3Front Reflector Bracket and Reflector Assembly 3
33 Front Reflector Bracket InstallationFront Reflector Bracket Installation

たとえば、次のテーブル (フラグメント 1) は、 Document テーブルの Title 列に対して作成されたフルテキスト インデックスの内容を示しています。For example, the following table, which shows Fragment 1, depicts the contents of the full-text index created on the Title column of the Document table. フルテキスト インデックスには、この表に示されているより多くの情報が含まれています。Full-text indexes contain more information than is presented in this table. このテーブルは、フルテキスト インデックスの論理表現であり、例を挙げる目的で紹介しています。The table is a logical representation of a full-text index and is provided for demonstration purposes only. 行は、ディスクの使用量を最適化するために圧縮形式で格納されます。The rows are stored in a compressed format to optimize disk usage.

データが元のドキュメントとは逆になっていることに注意してください。Notice that the data has been inverted from the original documents. これはキーワードがドキュメント ID にマップされているためです。Inversion occurs because the keywords are mapped to the document IDs. このため、フルテキスト インデックスは一般に逆インデックスと呼ばれます。For this reason, a full-text index is often referred to as an inverted index.

キーワード "and" がフルテキスト インデックスから削除されていることにも注意してください。Also notice that the keyword "and" has been removed from the full-text index. これは "and" がストップワードであり、フルテキスト インデックスからストップワードを削除することで、ディスク領域を大幅に節約し、クエリのパフォーマンスを向上させることができるためです。This is done because "and" is a stopword, and removing stopwords from a full-text index can lead to substantial savings in disk space thereby improving query performance. ストップワードの詳細については、「 フルテキスト検索に使用するストップワードとストップリストの構成と管理」を参照してください。For more information about stopwords, see Configure and Manage Stopwords and Stoplists for Full-Text Search.

フラグメント 1Fragment 1

KeywordKeyword ColIdColId DocIdDocId 個数Occurrence
CrankCrank 11 11 11
ArmArm 11 11 22
TireTire 11 11 44
メンテナンスMaintenance 11 11 55
FrontFront 11 22 11
FrontFront 11 33 11
ReflectorReflector 11 22 22
ReflectorReflector 11 22 55
ReflectorReflector 11 33 22
BracketBracket 11 22 33
BracketBracket 11 33 33
アセンブリAssembly 11 22 66
33 11 22 77
インストールInstallation 11 33 44

Keyword 列には、インデックス作成時に抽出された単一のトークン表現が含まれています。The Keyword column contains a representation of a single token extracted at indexing time. ワード ブレーカーが、トークンの構成要素を決定します。Word breakers determine what makes up a token.

ColId 列には、フルテキスト インデックスが作成されている特定の列に対応する値が含まれています。The ColId column contains a value that corresponds to a particular column that is full-text indexed.

DocId 列には、フルテキスト インデックスが作成されているテーブルで特定のフルテキスト キー値にマップされる 8 バイトの整数値が含まれています。The DocId column contains values for an eight-byte integer that maps to a particular full-text key value in a full-text indexed table. このマッピングは、フルテキスト キーが整数データ型でない場合に必要になります。This mapping is necessary when the full-text key is not an integer data type. このような場合、フルテキスト キー値と DocId 値とのマッピングは、DocId Mapping テーブルと呼ばれる別のテーブルで保持されます。In such cases, mappings between full-text key values and DocId values are maintained in a separate table called the DocId Mapping table. これらのマッピングをクエリするには、 sp_fulltext_keymappings システム ストアド プロシージャを使用します。To query for these mappings use the sp_fulltext_keymappings system stored procedure. 検索条件を満たすには、上記の表の DocId 値と DocId Mapping テーブルを結合し、クエリ対象のベース テーブルから行を取得する必要があります。To satisfy a search condition, DocId values from the above table need to be joined with the DocId Mapping table to retrieve rows from the base table being queried. ベース テーブルのフルテキスト キー値が整数データ型の場合は、その値を DocId として直接使用できるため、マッピングは必要ありません。If the full-text key value of the base table is an integer type, the value directly serves as the DocId and no mapping is necessary. したがって、整数データ型のフルテキスト キー値を使用すると、フルテキスト クエリを最適化できます。Therefore, using integer full-text key values can help optimize full-text queries.

Occurrence 列には整数値が含まれます。The Occurrence column contains an integer value. DocId 値ごとに、その DocId 内の特定キーワードの相対的な単語オフセットに対応するオカレンス値の一覧があります。For each DocId value, there is a list of occurrence values that correspond to the relative word offsets of the particular keyword within that DocId. オカレンス値は、句または近接検索の判定に役立ちます。たとえば、句には数値の近いオカレンス値が含まれます。Occurrence values are useful in determining phrase or proximity matches, for example, phrases have numerically adjacent occurrence values. また、関連性スコアを計算するのにも役立ちます。たとえば、DocId のキーワードのオカレンス数をスコアリングに使用できます。They are also useful in computing relevance scores; for example, the number of occurrences of a keyword in a DocId may be used in scoring.

フルテキスト インデックス フラグメントFull-text index fragments

論理フルテキスト インデックスは、通常、複数の内部テーブルに分割されます。The logical full-text index is usually split across multiple internal tables. 各内部テーブルは、フルテキスト インデックス フラグメントと呼ばれます。Each internal table is called a full-text index fragment. これらのフラグメントの一部は、他のフラグメントよりも新しいデータを含んでいることがあります。Some of these fragments might contain newer data than others. たとえば、DocId が 3 である次の行をユーザーが更新し、テーブルの変更が自動的に追跡される場合、新しいフラグメントが作成されます。For example, if a user updates the following row whose DocId is 3 and the table is auto change-tracked, a new fragment is created.

DocumentIDDocumentID [タイトル]Title
33 Rear ReflectorRear Reflector

次に示すフラグメント 2 には、フラグメント 1 より新しい、DocId 3 に関するデータが含まれています。In the following example, which shows Fragment 2, the fragment contains newer data about DocId 3 compared to Fragment 1. したがって、ユーザーが "Rear Reflector" をクエリした場合、フラグメント 2 に含まれている DocId 3 のデータが使用されます。Therefore, when the user queries for "Rear Reflector" the data from Fragment 2 is used for DocId 3. 各フラグメントには、 sys.fulltext_index_fragments カタログ ビューを使用してクエリできる作成タイムスタンプが付いています。Each fragment is marked with a creation timestamp that can be queried by using the sys.fulltext_index_fragments catalog view.

フラグメント 2Fragment 2

KeywordKeyword ColIdColId DocIdDocId OccOcc
RearRear 11 33 11
ReflectorReflector 11 33 22

フラグメント 2 を見ればわかるように、フルテキスト クエリでは、各フラグメントを内部的にクエリし、古いエントリを破棄する必要があります。As can be seen from Fragment 2, full-text queries need to query each fragment internally and discard older entries. したがって、非常に多くのフルテキスト インデックス フラグメントがフルテキスト インデックスに含まれている場合、クエリのパフォーマンスが大幅に低下する可能性があります。Therefore, too many full-text index fragments in the full-text index can lead to substantial degradation in query performance. フラグメントの数を減らすには、 ALTER FULLTEXT CATALOGTransact-SQLTransact-SQL ステートメントの REORGANIZE オプションを使用してフルテキスト カタログを再構成します。To reduce the number of fragments, reorganize the fulltext catalog by using the REORGANIZE option of the ALTER FULLTEXT CATALOGTransact-SQLTransact-SQL statement. このステートメントは マスター マージを実行します。マスター マージでは、フラグメントが単一のより大きなフラグメントにマージされ、フルテキスト インデックスから古いエントリがすべて削除されます。This statement performs a master merge, which merges the fragments into a single larger fragment and removes all obsolete entries from the full-text index.

再構成が完了すると、次の行が例のインデックスに格納されます。After being reorganized, the example index would contain the following rows:

KeywordKeyword ColIdColId DocIdDocId OccOcc
CrankCrank 11 11 11
ArmArm 11 11 22
TireTire 11 11 44
メンテナンスMaintenance 11 11 55
FrontFront 11 22 11
RearRear 11 33 11
ReflectorReflector 11 22 22
ReflectorReflector 11 22 55
ReflectorReflector 11 33 22
BracketBracket 11 22 33
アセンブリAssembly 11 22 66
33 11 22 77

フルテキスト インデックスと標準の SQL Server インデックスの違い:Differences between full-text indexes and regular SQL Server indexes:.

フルテキスト インデックスFull-text indexes 標準の SQL Server インデックスRegular SQL Server indexes
1 つのテーブルに対し、1 つのフルテキスト インデックスしか使用できません。Only one full-text index allowed per table. 1 つのテーブルに対し、複数の標準インデックスを使用できます。Several regular indexes allowed per table.
フルテキスト インデックスへのデータの追加は作成と呼ばれ、スケジュールによる要求または個別の要求のどちらかを通じて要求できます。または、新規データの追加と共に自動的に行うことができます。The addition of data to full-text indexes, called a population, can be requested through either a schedule or a specific request, or can occur automatically with the addition of new data. 関連するデータが挿入、更新、または削除されたときに、自動的に更新されます。Updated automatically when the data upon which they are based is inserted, updated, or deleted.
同じデータベース内で 1 つ以上のフルテキスト カタログにグループ化されます。Grouped within the same database into one or more full-text catalogs. グループ化されません。Not grouped.

フルテキスト検索の言語コンポーネントと言語サポートFull-Text search linguistic components and language support

フルテキスト検索では、英語、スペイン語、中国語、日本語、アラビア語、ベンガル語、ヒンディー語など、約 50 種類の言語を使用できます。Full-text search supports almost 50 diverse languages, such as English, Spanish, Chinese, Japanese, Arabic, Bengali, and Hindi. サポートされているフルテキスト言語の一覧については、「sys.fulltext_languages (Transact-SQL)」を参照してください。For a complete list of the supported full-text languages, see sys.fulltext_languages (Transact-SQL). フルテキスト インデックスに含まれている各列には Microsoft Windows ロケール識別子 (LCID) が関連付けられています。これは、フルテキスト検索でサポートされている言語を表します。Each of the columns contained in the full-text index is associated with a Microsoft Windows locale identifier (LCID) that equates to a language that is supported by full-text search. たとえば、LCID 1033 は米国英語を表し、LCID 2057 は英国英語を表しています。For example, LCID 1033 equates to U.S English, and LCID 2057 equates to British English. SQL ServerSQL Server では、サポート対象の言語ごとに、その言語で格納されているフルテキスト データのインデックスを作成し、クエリを実行するための言語コンポーネントが用意されています。For each supported full-text language, SQL ServerSQL Server provides linguistic components that support indexing and querying full-text data that is stored in that language.

言語固有のコンポーネントは、次のとおりです。Language-specific components include the following:

  • ワード ブレーカーとステミング機能。Word breakers and stemmers. ワード ブレーカーは、各言語の語彙規則に基づいて単語の境界を検出します (単語区切り)。A word breaker finds word boundaries based on the lexical rules of a given language (word breaking). 各ワード ブレーカーには、その言語の動詞を活用するステミング機能が関連付けられています。Each word breaker is associated with a stemmer that conjugates verbs for the same language. 詳細については、「 検索用のワード ブレーカーとステミング機能の構成と管理」を参照してください。For more information, see Configure and Manage Word Breakers and Stemmers for Search.

  • ストップリスト。Stoplists. 基本的なストップワード (ノイズ ワードとも呼ばれます) をまとめたシステム ストップリストが用意されています。A system stoplist is provided that contains a basic set stopwords (also known as noise words). ストップワード とは、検索に役立たないためにフルテキスト クエリで無視される語です。A stopword is a word that does not help the search and is ignored by full-text queries. たとえば、英語ロケールでは、"a"、"and"、"is"、"the" などの語はストップワードと見なされます。For example, for the English locale words such as "a", "and", "is", and "the" are considered stopwords. 通常は、類義語辞典ファイルおよびストップリストを 1 つ以上構成する必要があります。Typically, you will need to configure one or more thesaurus files and stoplists. 詳細については、「 フルテキスト検索に使用するストップワードとストップリストの構成と管理」を参照してください。For more information, see Configure and Manage Stopwords and Stoplists for Full-Text Search.

  • 類義語辞典ファイル。Thesaurus files. SQL ServerSQL Server グローバル類義語辞典ファイルと共に、各フルテキスト言語の類義語辞典ファイルもインストールされます。also installs a thesaurus file for each full-text language, as well as a global thesaurus file. インストールされた類義語辞典ファイルは基本的には空ですが、このファイルを編集して、特定の言語またはビジネス シナリオ用のシノニムを定義することができます。The installed thesaurus files are essentially empty, but you can edit them to define synonyms for a specific language or business scenario. フルテキスト データに合わせた類義語辞典を作成すると、そのデータのフルテキスト クエリのスコープを効果的に拡張できます。By developing a thesaurus tailored to your full-text data, you can effectively broaden the scope of full-text queries on that data. 詳細については、「 フルテキスト検索に使用する類義語辞典ファイルの構成と管理」を参照してください。For more information, see Configure and Manage Thesaurus Files for Full-Text Search.

  • フィルター (iFilters)。Filters (iFilters). varbinary(max)image、または xml データ型の列に格納されたドキュメントのインデックスを作成するには、追加の処理を実行するためのフィルターが必要です。Indexing a document in a varbinary(max), image, or xml data type column requires a filter to perform extra processing. このフィルターは、ドキュメントの種類ごと (.doc、.pdf、.xls、.xml など) に用意する必要があります。The filter must be specific to the document type (.doc, .pdf, .xls, .xml, and so forth). 詳細については、「 検索用フィルターの構成と管理」を参照してください。For more information, see Configure and Manage Filters for Search.

ワード ブレーカー (およびステミング機能) とフィルターは、フィルター デーモン ホスト プロセス (fdhost.exe) で実行されます。Word breakers (and stemmers) and filters run in the filter daemon host process (fdhost.exe).

適用対象: ○SQL Server (2008 以降) ○Azure SQL Database XAzure SQL Data Warehouse XParallel Data Warehouse APPLIES TO: yesSQL Server (starting with 2008) yesAzure SQL Database noAzure SQL Data Warehouse noParallel Data Warehouse