適用対象: yesSQL Server noAzure SQL Database noAzure Synapse Analytics (SQL DW) noParallel Data Warehouse APPLIES TO: yesSQL Server noAzure SQL Database noAzure Synapse Analytics (SQL DW) noParallel Data Warehouse

Transact-SQLTransact-SQL SELECT ステートメントの Transact-SQLTransact-SQL WHERE 句で使用される述語です。文字ベースのデータ型を含むフルテキスト インデックス列で SQL ServerSQL Server のフルテキスト検索を実行します。Is a predicate used in the Transact-SQLTransact-SQL WHERE clause of a Transact-SQLTransact-SQL SELECT statement to perform a SQL ServerSQL Server full-text search on full-text indexed columns containing character-based data types. この述語は、検索条件の文字列の並びと正確に一致しなくても意味が合っている値を検索できます。This predicate searches for values that match the meaning and not just the exact wording of the words in the search condition. FREETEXT を使用すると、フルテキスト クエリ エンジンによって、freetext_string を基に次の内部操作が実行され、各語に重みが割り当てられた後、一致するものが検索されます。When FREETEXT is used, the full-text query engine internally performs the following actions on the freetext_string, assigns each term a weight, and then finds the matches:

  • 単語の区切りに基づいて、文字列を個々の単語に分割。Separates the string into individual words based on word boundaries (word-breaking).

  • 単語の語尾変化形を生成 (語幹への分割)。Generates inflectional forms of the words (stemming).

  • 類義語との一致に基づいて、語の拡張と置き換えの一覧を決定。Identifies a list of expansions or replacements for the terms based on matches in the thesaurus.


SQL ServerSQL Server でサポートされているフルテキスト検索の形式については、「フルテキスト検索でのクエリ」を参照してください。For information about the forms of full-text searches that are supported by SQL ServerSQL Server, see Query with Full-Text Search.

適用対象: SQL ServerSQL Server (SQL Server 2008SQL Server 2008 から現在のバージョンまで)。Applies to: SQL ServerSQL Server ( SQL Server 2008SQL Server 2008 through current version).

トピック リンク アイコン Transact-SQL 構文表記規則Topic link icon Transact-SQL Syntax Conventions


FREETEXT ( { column_name | (column_list) | * }   
          , 'freetext_string' [ , LANGUAGE language_term ] )  


FROM 句で指定したテーブルのフルテキスト インデックス付きの列の名前を指定します。Is the name of one or more full-text indexed columns of the table specified in the FROM clause. 列には、charvarcharncharnvarchartextntextimagexmlvarbinaryvarbinary(max) のいずれかの型を指定できます。The columns can be of type char, varchar, nchar, nvarchar, text, ntext, image, xml, varbinary, or varbinary(max).

コンマ区切りで複数の列を指定できます。Indicates that several columns, separated by a comma, can be specified. column_list は、かっこで囲む必要があります。column_list must be enclosed in parentheses. language_term を指定しない場合、column_list で指定するすべての列の言語は同じにする必要があります。Unless language_term is specified, the language of all columns of column_list must be the same.

フルテキスト検索用に登録されているすべての列を使用して、指定した freetext_string を検索します。Specifies that all columns that have been registered for full-text searching should be used to search for the given freetext_string. FROM 句に複数のテーブルが指定されている場合は、テーブル名で * を限定する必要があります。If more than one table is in the FROM clause, * must be qualified by the table name. language_term を指定しない場合、テーブルのすべての列の言語は同じである必要があります。Unless language_term is specified, the language of all columns of the table must be the same.

column_name で検索するテキストです。Is text to search for in the column_name. 単語、フレーズ、文など、あらゆるテキストを入力できます。Any text, including words, phrases or sentences, can be entered. 用語または一定の形式になっている用語がフルテキスト インデックス内に見つかった場合、一致するものと判断されます。Matches are generated if any term or the forms of any term is found in the full-text index.

CONTAINS と CONTAINSTABLE の検索条件では AND はキーワードになりますが、freetext_string では 'and' はノイズ語 (ストップワード) と見なされ、破棄されます。Unlike in the CONTAINS and CONTAINSTABLE search condition where AND is a keyword, when used in freetext_string the word 'and' is considered a noise word, or stopword, and will be discarded.

WEIGHT、FORMSOF、ワイルドカード、NEAR、その他の構文は使用できません。Use of WEIGHT, FORMSOF, wildcards, NEAR and other syntax is not allowed. freetext_string は単語、語幹に分割され、類義語がチェックされて渡されます。freetext_string is wordbroken, stemmed, and passed through the thesaurus.

freetext_stringnvarchar です。freetext_string is nvarchar. 入力に他の文字データ型が使用された場合は、暗黙の変換が行われます。An implicit conversion occurs when another character data type is used as input. 大きな文字列データ型 nvarchar (max) および varchar (max) は使用できません。Large string data types nvarchar(max) and varchar(max) cannot be used. 次の例では、FREETEXT 述語において、varchar(30) として定義されている変数 @SearchWord が暗黙に変換されます。In the following example, the @SearchWord variable, which is defined as varchar(30), causes an implicit conversion in the FREETEXT predicate.

USE AdventureWorks2012;  
DECLARE @SearchWord varchar(30)  
SET @SearchWord ='performance'  
SELECT Description   
FROM Production.ProductDescription   
WHERE FREETEXT(Description, @SearchWord);  

変換では "パラメーターを見つけ出す" 動作が機能しないため、パフォーマンスの向上を目的とする場合には nvarchar を使用してください。Because "parameter sniffing" does not work across conversion, use nvarchar for better performance. 次の例では、@SearchWordnvarchar(30) として宣言しています。In the example, declare @SearchWord as nvarchar(30).

USE AdventureWorks2012;  
DECLARE @SearchWord nvarchar(30)  
SET @SearchWord = N'performance'  
SELECT Description   
FROM Production.ProductDescription   
WHERE FREETEXT(Description, @SearchWord);  

最適化されていないプランが生成される場合には、OPTIMIZE FOR クエリ ヒントを使用することもできます。You can also use the OPTIMIZE FOR query hint for cases in which a nonoptimal plan is generated.

LANGUAGE language_termLANGUAGE language_term
クエリにおいて、単語区切り、語幹への分割、類義語のチェック、ストップワードの破棄を行うときに使用する言語リソースの言語を指定します。Is the language whose resources will be used for word breaking, stemming, and thesaurus and stopword removal as part of the query. このパラメーターは省略可能で、言語のロケール識別子 (LCID) に対応する文字列、整数、または 16 進数の値を指定できます。This parameter is optional and can be specified as a string, integer, or hexadecimal value corresponding to the locale identifier (LCID) of a language. language_term を指定した場合、その言語は検索条件のすべての要素に適用されます。If language_term is specified, the language it represents will be applied to all elements of the search condition. 値を指定しなかった場合は、列のフルテキストの言語が使用されます。If no value is specified, the column full-text language is used.

1 つの列に言語の異なる複数のドキュメントが BLOB (Binary Large Object) として格納されている場合、そのインデックスの作成に使用される言語は、そのドキュメントのロケール識別子 (LCID) によって決まります。If documents of different languages are stored together as binary large objects (BLOBs) in a single column, the locale identifier (LCID) of a given document determines what language is used to index its content. そのような列に対してクエリを実行する場合は、LANGUAGE language_term を指定すると検索結果の一致率が高まります。When querying such a column, specifying LANGUAGE language_term can increase the probability of a good match.

language_term を文字列で指定する場合は、sys.syslanguages (Transact-SQL) 互換性ビューの alias 列の値と同じ値を指定します。When specified as a string, language_term corresponds to the alias column value in he sys.syslanguages (Transact-SQL) compatibility view. 文字列の場合は、'language_term' のように引用符 (') で囲む必要があります。The string must be enclosed in single quotation marks, as in 'language_term'. language_term を整数で指定する場合は、その言語を表す実際の LCID を指定します。When specified as an integer, language_term is the actual LCID that identifies the language. language_term を 16 進数の値で指定する場合は、「0x」の後に LCID の 16 進数の値を指定します。When specified as a hexadecimal value, language_term is 0x followed by the hexadecimal value of the LCID. 16 進数の値は、先頭の 0 を含め、8 桁以内で指定してください。The hexadecimal value must not exceed eight digits, including leading zeros.

値を 2 バイト文字セット (DBCS) の形式で指定すると、MicrosoftMicrosoft SQL ServerSQL Server で Unicode に変換されます。If the value is in double-byte character set (DBCS) format, MicrosoftMicrosoft SQL ServerSQL Server will convert it to Unicode.

指定した言語が無効であるか、その言語に該当するリソースがインストールされていない場合は、MicrosoftMicrosoft SQL ServerSQL Server によりエラーが返されます。If the language specified is not valid or there are no resources installed that correspond to that language, MicrosoftMicrosoft SQL ServerSQL Server returns an error. ニュートラル言語リソースを使用するには、language_term に「0x0」を指定してください。To use the neutral language resources, specify 0x0 as language_term.

全般的な解説General Remarks

フルテキストの述語と関数の対象は、FROM 述語で示される 1 つのテーブルです。Full-text predicates and functions work on a single table, which is implied in the FROM predicate. 複数のテーブルを検索するには、FROM 句で結合テーブルを使用して、複数のテーブルが組み合わされた結果セットを検索します。To search on multiple tables, use a joined table in your FROM clause to search on a result set that is the product of two or more tables.

FREETEXT を使用するフルテキスト クエリは、CONTAINS を使用するフルテキスト クエリほど正確ではありません。Full-text queries using FREETEXT are less precise than those full-text queries using CONTAINS. SQL ServerSQL Server のフルテキスト検索エンジンでは、重要な単語と語句が識別されます。The SQL ServerSQL Server full-text search engine identifies important words and phrases. 予約済みキーワードやワイルドカード文字は、CONTAINS 述語の <contains_search_condition> パラメーターに指定した場合は特別な意味が与えられますが、FREETEXT の場合は特別な意味はありません。No special meaning is given to any of the reserved keywords or wildcard characters that typically have meaning when specified in the <contains_search_condition> parameter of the CONTAINS predicate.

データベースの互換性レベルが 100 に設定されている場合、OUTPUT 句 でフルテキスト述語を使用することはできません。Full-text predicates are not allowed in the OUTPUT clause when the database compatibility level is set to 100.


FREETEXTTABLE 関数は、FREETEXT 述語と同様の検索に役立ちます。The FREETEXTTABLE function is useful for the same kinds of matches as the FREETEXT predicate. この関数は、SELECT ステートメントの FROM 句の中で通常のテーブル名のように参照できます。You can reference this function like a regular table name in the FROM clause of a SELECT statement. 詳細については、「FREETEXTTABLE (Transact-SQL)」を参照してください。For more information, see FREETEXTTABLE (Transact-SQL).

リモート サーバーのクエリQuerying Remote Servers

CONTAINS または FREETEXT 述語に 4 つの要素で構成される名前を使用して、リンク サーバー上にある対象テーブルのフルテキスト インデックス列にクエリを実行できます。You can use a four-part name in the CONTAINS or FREETEXT predicate to query full-text indexed columns of the target tables on a linked server. フルテキスト クエリを受け取るようリモート サーバーを準備するには、リモート サーバー上の検索対象のテーブルおよび列にフルテキスト インデックスを作成し、リモート サーバーをリンク サーバーとして追加します。To prepare a remote server to receive full-text queries, create a full-text index on the target tables and columns on the remote server and then add the remote server as a linked server.

フルテキスト検索とは異なり、 LIKETransact-SQLTransact-SQL 述語は、文字パターンにのみで動作します。In contrast to full-text search, the LIKETransact-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.


A.A. FREETEXT を使用して、指定した文字値を含む単語を検索するUsing FREETEXT to search for words containing specified character values

次の例では、vital、safety、components に関連する単語を含むすべてのドキュメントを検索します。The following example searches for all documents containing the words related to vital, safety, components.

USE AdventureWorks2012;  
SELECT Title  
FROM Production.Document  
WHERE FREETEXT (Document, 'vital safety components' );  

B.B. FREETEXT で変数を使用するUsing FREETEXT with variables

次の例では、特定の検索語ではなく変数を使用します。The following example uses a variable instead of a specific search term.

USE AdventureWorks2012;  
DECLARE @SearchWord nvarchar(30);  
SET @SearchWord = N'high-performance';  
SELECT Description   
FROM Production.ProductDescription   
WHERE FREETEXT(Description, @SearchWord);  

参照See Also

フルテキスト検索の概要 Get Started with Full-Text Search
フルテキスト カタログの作成と管理 Create and Manage Full-Text Catalogs
フルテキスト インデックスの作成と管理 Create and Manage Full-Text Indexes
フルテキスト検索でのクエリ Query with Full-Text Search
フルテキスト検索クエリの作成 (Visual Database Tools) Create Full-Text Search Queries (Visual Database Tools)
データ型 (Transact-SQL) Data Types (Transact-SQL)
WHERE (Transact-SQL)WHERE (Transact-SQL)