CONTAINS (Transact-SQL)CONTAINS (Transact-SQL)

適用対象: はいSQL Server はいAzure SQL Database いいえAzure Synapse Analytics (SQL DW) いいえParallel Data Warehouse APPLIES TO: YesSQL Server YesAzure SQL Database NoAzure Synapse Analytics (SQL DW) NoParallel Data Warehouse

SQL ServerSQL Server で、単語または語句との完全一致検索やあいまい一致検索、特定の範囲内での検索、または重み付き検索を行います。Searches for precise or fuzzy (less precise) matches to single words and phrases, words within a certain distance of one another, or weighted matches in SQL ServerSQL Server. CONTAINS は SELECT ステートメントの WHERE 句Transact-SQLTransact-SQLで使用される述語です。文字ベースのデータ型を含むフルテキスト インデックス列で SQL ServerSQL Server のフルテキスト検索を実行します。CONTAINS is a predicate used in the WHERE clause of a Transact-SQLTransact-SQL SELECT statement to perform SQL ServerSQL Server full-text search on full-text indexed columns containing character-based data types.

次に CONTAINS の検索対象を示します。CONTAINS can search for:

  • 単語または語句。A word or phrase.

  • 単語または語句のプレフィックス。The prefix of a word or phrase.

  • 別の単語の近くにある単語。A word near another word.

  • 他の単語を語形変化して生成された単語。たとえば、drive という単語からは、drives、drove、driving、driven などの単語が生成されます。A word inflectionally generated from another (for example, the word drive is the inflectional stem of drives, drove, driving, and driven).

  • シソーラスで別の単語のシノニムになっている単語。たとえば、"金属" という単語には、"アルミニウム" や "スチール" などのシノニムがあります。A word that is a synonym of another word using a thesaurus (for example, the word "metal" can have synonyms such as "aluminum" and "steel").

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.

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

構文Syntax

CONTAINS (   
     {   
        column_name | ( column_list )   
      | *   
      | PROPERTY ( { column_name }, 'property_name' )    
     }   
     , '<contains_search_condition>'  
     [ , LANGUAGE language_term ]  
   )   
  
<contains_search_condition> ::=   
  {   
      <simple_term>   
    | <prefix_term>   
    | <generation_term>   
    | <generic_proximity_term>   
    | <custom_proximity_term>   
    | <weighted_term>   
    }   
  |   
    { ( <contains_search_condition> )   
        [ { <AND> | <AND NOT> | <OR> } ]   
        <contains_search_condition> [ ...n ]   
  }   
<simple_term> ::=   
     { word | "phrase" }  
  
<prefix term> ::=   
  { "word*" | "phrase*" }  
  
<generation_term> ::=   
  FORMSOF ( { INFLECTIONAL | THESAURUS } , <simple_term> [ ,...n ] )   
  
<generic_proximity_term> ::=   
  { <simple_term> | <prefix_term> } { { { NEAR | ~ }   
     { <simple_term> | <prefix_term> } } [ ...n ] }  
  
<custom_proximity_term> ::=   
  NEAR (   
     {  
        { <simple_term> | <prefix_term> } [ ,...n ]  
     |  
        ( { <simple_term> | <prefix_term> } [ ,...n ] )   
      [, <maximum_distance> [, <match_order> ] ]  
     }  
       )   
  
      <maximum_distance> ::= { integer | MAX }  
      <match_order> ::= { TRUE | FALSE }   
  
<weighted_term> ::=   
  ISABOUT   
   ( {   
        {   
          <simple_term>   
        | <prefix_term>   
        | <generation_term>   
        | <proximity_term>   
        }   
      [ WEIGHT ( weight_value ) ]   
      } [ ,...n ]   
   )   
  
<AND> ::=   
  { AND | & }  
  
<AND NOT> ::=   
  { AND NOT | &! }  
  
<OR> ::=   
  { OR | | }  
  

引数Arguments

column_namecolumn_name
FROM 句で指定されたテーブルのフルテキスト インデックス付き列の名前を指定します。Is the name of a full-text indexed column 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).

column_listcolumn_list
複数の列をコンマで区切って指定します。Specifies two or more columns, separated by commas. 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.

*
検索条件の FROM 句で指定したテーブルのすべてのフルテキスト インデックス付きの列が検索対象になります。Specifies that the query searches all full-text indexed columns in the table specified in the FROM clause for the given search condition. CONTAINS 句内の列は、フルテキスト インデックスがある単一テーブルから取得する必要があります。The columns in the CONTAINS clause must come from a single table that has a full-text index. language_term を指定しない場合、テーブルのすべての列の言語は同じである必要があります。Unless language_term is specified, the language of all columns of the table must be the same.

PROPERTY ( column_name , 'property_name')PROPERTY ( column_name , 'property_name')
適用対象: SQL Server 2012 (11.x)SQL Server 2012 (11.x) 以降。Applies to: SQL Server 2012 (11.x)SQL Server 2012 (11.x) and later.

指定した検索条件を検索するドキュメント プロパティを指定します。Specifies a document property on which to search for the specified search condition.

重要

行を返すクエリの場合、フルテキスト インデックスの検索プロパティ リストで property_name を指定し、フルテキスト インデックスに property_name のプロパティに固有のエントリを含める必要があります。For the query to return any rows, property_name must be specified in the search property list of the full-text index and the full-text index must contain property-specific entries for property_name. 詳細については、「 検索プロパティ リストを使用したドキュメント プロパティの検索」を参照してください。For more information, see Search Document Properties with Search Property Lists.

LANGUAGE language_termLANGUAGE language_term
クエリにおいて、単語区切り、語幹検索、類義語の拡張と置換、およびノイズ語 (ストップワード) の破棄を行うときに使用する言語を指定します。Is the language to use for word breaking, stemming, thesaurus expansions and replacements, and noise-word (or stopword) removal as part of the query. このパラメーターは省略可能です。This parameter is optional.

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 to use 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 には、言語の LCID に対応する文字列、整数、または 16 進数の値を指定できます。language_term can be specified as a string, integer, or hexadecimal value corresponding to the LCID of a language. language_term を指定した場合、その言語は検索条件のすべての要素に適用されます。If language_term is specified, the language it represents is applied to all elements of the search condition. 値を指定しなかった場合は、列のフルテキストの言語が使用されます。If no value is specified, the column full-text language is used.

language_term を文字列で指定する場合は、sys.syslanguages (Transact-SQL) 互換性ビューの alias 列の値と同じ値を指定します。When specified as a string, language_term corresponds to the alias column value in the 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) の形式で指定すると、SQL ServerSQL Server で Unicode に変換されます。If the value is in double-byte character set (DBCS) format, SQL ServerSQL Server converts it to Unicode.

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

<contains_search_condition><contains_search_condition>
column_name で検索するテキストと、その一致条件を指定します。Specifies the text to search for in column_name and the conditions for a match.

<contains_search_condition> is nvarchar.<contains_search_condition> 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. 次の例では、@SearchWord 述語において、varchar(30) として定義されている変数 CONTAINS が暗黙に変換されます。In the following example, the @SearchWord variable, which is defined as varchar(30), causes an implicit conversion in the CONTAINS predicate.

USE AdventureWorks2012;  
GO  
DECLARE @SearchWord varchar(30)  
SET @SearchWord ='performance'  
SELECT Description   
FROM Production.ProductDescription   
WHERE CONTAINS(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;  
GO  
DECLARE @SearchWord nvarchar(30)  
SET @SearchWord = N'performance'  
SELECT Description   
FROM Production.ProductDescription   
WHERE CONTAINS(Description, @SearchWord);  

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

wordword
スペースまたは句読点なしの文字列を指定します。Is a string of characters without spaces or punctuation.

phrasephrase
単語間をスペースで区切った 1 つ以上の語を指定します。Is one or more words with spaces between each word.

注意

アジアの一部の言語などのフレーズでは、語句を構成するときに単語間にスペースを挿入しないものがあります。Some languages, such as those written in some parts of Asia, can have phrases that consist of one or more words without spaces between them.

<simple_term><simple_term>
単語または語句に対する完全一致を指定します。Specifies a match for an exact word or a phrase. 有効な単純語の例には、"blue berry"、blueberry、および "Microsoft SQL Server" などがあります。Examples of valid simple terms are "blue berry", blueberry, and "Microsoft SQL Server". 語句は二重引用符 ("") で囲みます。Phrases should be enclosed in double quotation marks (""). 語句内の単語は、 <contains_search_condition> の指定と同じ順序で、データベース列に含まれている必要があります。Words in a phrase must appear in the same order as specified in <contains_search_condition> as they appear in the database column. 単語または語句内の文字の検索では、大文字と小文字は区別されません。The search for characters in the word or phrase is not case-sensitive. フルテキスト インデックス化された列の a、and、the などのノイズ ワード (ストップワード) は、フルテキスト インデックスには格納されません。Noise words (or stopwords) (such as a, and, or the) in full-text indexed columns are not stored in the full-text index. 1 つの単語の検索にノイズ ワードを使用した場合、SQL ServerSQL Server ではクエリにノイズ ワードだけが指定されていることを示すエラーが返されます。If a noise word is used in a single word search, SQL ServerSQL Server returns an error message indicating that the query contains only noise words. SQL ServerSQL Server では、SQL ServerSQL Server の各インスタンスのディレクトリ \Mssql\Binn\FTERef にノイズ ワードの標準リストがあります。includes a standard list of noise words in the directory \Mssql\Binn\FTERef of each instance of SQL ServerSQL Server.

句読点は無視されます。Punctuation is ignored. したがって、CONTAINS(testing, "computer failure") は、"Where is my computer?Therefore, CONTAINS(testing, "computer failure") matches a row with the value, "Where is my computer? Failure to find it would be expensive." がある行に一致します。Failure to find it would be expensive." ワード ブレーカーの動作の詳細については、「検索用のワード ブレーカーとステミング機能の構成と管理」を参照してください。For more information on word-breaker behavior, see Configure and Manage Word Breakers and Stemmers for Search.

<prefix_term><prefix_term>
指定のテキストで始まる単語または語句の一致を指定します。Specifies a match of words or phrases beginning with the specified text. プレフィックス語句を二重引用符 ("") で囲み、後ろの二重引用符の前にアスタリスク (*) を挿入すると、アスタリスクの前に指定された文字列で始まるすべてのテキストが照合されます。Enclose a prefix term in double quotation marks ("") and add an asterisk (*) before the ending quotation mark, so that all text starting with the simple term specified before the asterisk is matched. 句は、CONTAINS (column, '"text*"') のように指定してください。The clause should be specified this way: CONTAINS (column, '"text*"'). アスタリスクは、一致する文字がないか、1 つまたはそれ以上の文字に一致します。その単語または語句を語根とする文字も対象になります。The asterisk matches zero, one, or more characters (of the root word or words in the word or phrase). テキストとアスタリスクが二重引用符で区切られていないと、述語が読み取る内容は CONTAINS (column, 'text*') となり、フルテキスト検索でアスタリスクが文字と見なされ、text* への完全一致が検索されます。If the text and asterisk are not delimited by double quotation marks, so the predicate reads CONTAINS (column, 'text*'), full-text search considers the asterisk as a character and searches for exact matches to text*. 単語区切りでは通常このような文字は無視されるため、アスタリスク (*) 文字が付いた文字はフルテキスト エンジンによって検索されません。The full-text engine will not find words with the asterisk (*) character because word breakers typically ignore such characters.

<prefix_term> が語句のときは、語句に含まれるそれぞれの単語が独立したプレフィックスと見なされます。When <prefix_term> is a phrase, each word contained in the phrase is considered to be a separate prefix. したがって、"local wine *" というプレフィックスを指定しているクエリでは、"local winery"、"locally wined and dined"などの行が一致します。Therefore, a query specifying a prefix term of "local wine*" matches any rows with the text of "local winery", "locally wined and dined", and so on.

<generation_term><generation_term>
指定されている原形の語または語句が、検索対象である元の単語の変形を含んでいる場合に、これらの単語も照合の対象であることを指定します。Specifies a match of words when the included simple terms include variants of the original word for which to search.

INFLECTIONALINFLECTIONAL
言語依存の語幹検索が、指定した単純語に対して使用されます。Specifies that the language-dependent stemmer is to be used on the specified simple term. 語幹検索の動作は、各言語の語幹ルールに基づいて定義されています。Stemmer behavior is defined based on stemming rules of each specific language. ニュートラル言語には、関連する語幹検索がありません。The neutral language does not have an associated stemmer. クエリの対象となっている列の列言語は、必要な語幹検索を参照する場合に使用されます。The column language of the columns being queried is used to refer to the desired stemmer. language_term が指定されると、その言語に対応する語幹検索が使用されます。If language_term is specified, the stemmer corresponding to that language is used.

<generation_term> 内に指定された <simple_term> は、名詞と動詞のどちらにも一致しません。A given <simple_term> within a <generation_term> will not match both nouns and verbs.

THESAURUSTHESAURUS
列のフルテキスト言語に対応する類義語、またはクエリで指定された言語が使用されます。Specifies that the thesaurus corresponding to the column full-text language, or the language specified in the query is used. <simple_term> の最も長いパターンが類義語と照合され、追加の用語が生成されて、元のパターンを拡張するか置き換えます。The longest pattern or patterns from the <simple_term> are matched against the thesaurus and additional terms are generated to expand or replace the original pattern. <simple_term> の全体または一部に対して一致が見られない場合、一致しない部分が simple_term として処理されます。If a match is not found for all or part of the <simple_term>, the non-matching portion is treated as a simple_term. フルテキスト検索の類義語の詳細については、「フルテキスト検索に使用する類義語辞典ファイルの構成と管理」を参照してください。For more information on the full-text search thesaurus, see Configure and Manage Thesaurus Files for Full-Text Search.

<generic_proximity_term><generic_proximity_term>
検索対象のドキュメントに含まれている必要がある単語または語句の照合を指定します。Specifies a match of words or phrases that must be in the document that is being searched.

重要

この機能はメンテナンス モードであり、Microsoft SQL Server の将来のバージョンで削除される可能性があります。This feature is in maintenance mode and may be removed in a future version of Microsoft SQL Server. 新規の開発作業ではこの機能を使用しないようにし、現在この機能を使用しているアプリケーションは修正することを検討してください。Avoid using this feature in new development work, and plan to modify applications that currently use this feature.<custom_proximity_term>を使用することをお勧めします。We recommend that you use <custom_proximity_term>.

NEAR | ~NEAR | ~
一致が返されるには、NEAR (~) 演算子の両側の単語または語句がドキュメントに含まれている必要があります。Indicates that the word or phrase on each side of the NEAR or ~ operator must occur in a document for a match to be returned. 検索語句は 2 つ指定する必要があります。You must specify two search terms. 検索語句には、二重引用符で区切られた 1 つの単語または語句を指定できます ("語句")。A given search term can be either a single word or a phrase that is delimited by double quotation marks ("phrase").

a NEAR b NEAR c または a ~ b ~ c のように、複数の近接語句をつないで指定できます。Several proximity terms can be chained, as in a NEAR b NEAR c or a ~ b ~ c. 一致が返されるためには、指定したすべての近接語句がドキュメントに含まれている必要があります。Chained proximity terms must all be in the document for a match to be returned.

たとえば、CONTAINS(*column_name*, 'fox NEAR chicken')CONTAINSTABLE(*table_name*, *column_name*, 'fox ~ chicken') では、どちらの場合も、指定した列について "fox" と "chicken" の両方を含むドキュメントが返されますが、For example, CONTAINS(*column_name*, 'fox NEAR chicken') and CONTAINSTABLE(*table_name*, *column_name*, 'fox ~ chicken') would both return any documents in the specified column that contain both "fox" and "chicken". CONTAINSTABLE ではさらに、"fox" と "chicken" の近接度に基づく各ドキュメントのランクも返されます。In addition, CONTAINSTABLE returns a rank for each document based on the proximity of "fox" and "chicken". たとえば、"The fox ate the chicken" という文が含まれているドキュメントのランクは高くなります。これは、他のドキュメントよりも語句が近接しているためです。For example, if a document contains the sentence, "The fox ate the chicken," its ranking would be high because the terms are closer to one another than in other documents.

汎用近接語句の詳細については、「NEAR による他の単語の近くにある単語の検索」を参照してください。For more information about generic proximity terms, see Search for Words Close to Another Word with NEAR.

<custom_proximity_term><custom_proximity_term>
適用対象: SQL Server 2012 (11.x)SQL Server 2012 (11.x) 以降。Applies to: SQL Server 2012 (11.x)SQL Server 2012 (11.x) and later.

一致させる単語または語句と、必要に応じて検索語句間の許容最大距離を指定します。Specifies a match of words or phrases, and optionally, the maximum distance allowed between search terms. また、検索語句を指定したとおりの順序で検索するように指定することもできます (<match_order>)。you can also specify that search terms must be found in the exact order in which you specify them (<match_order>).

検索語句には、二重引用符で区切られた 1 つの単語または語句を指定できます ("語句")。A given search term can be either a single word or a phrase that is delimited by double quotation marks ("phrase"). 一致が返されるためには、指定したすべての語句がドキュメントに含まれている必要があります。Every specified term must be in the document for a match to be returned. 2 つ以上の検索語句を指定する必要があります。You must specify at least two search terms. 検索語句の最大数は 64 です。The maximum number of search terms is 64.

カスタム近接語句の場合、既定では、語句の間の距離やその順序に関係なく、指定した語句が含まれているすべての行が返されます。By default, the custom proximity term returns any rows that contain the specified terms regardless of the intervening distance and regardless of their order. たとえば、次のクエリと一致するには、term1 と "term3 term4" が任意の場所に任意の順序でドキュメントに含まれているだけで十分です。For example, to match the following query, a document would simply need to contain term1 and "term3 term4" anywhere, in any order:

CONTAINS(column_name, 'NEAR(term1,"term3 term4")')  

省略可能なパラメーターは次のとおりです。The optional parameters are as follows:

<maximum_distance><maximum_distance>
文字列と一致すると見なされるための、その文字列の先頭と末尾にある検索語句間の許容最大距離を指定します。Specifies the maximum distance allowed between the search terms at the start and end of a string in order for that string to qualify as a match.

integerinteger
0 から 4294967295 の正の整数を指定します。Specifies a positive integer from 0 to 4294967295. この値により、指定した他の検索用語を除く最初と最後の検索語句間にある非検索語句の数を制御できます。This value controls how many non-search terms can occur between the first and last search terms, excluding any additional specified search terms.

たとえば、次のクエリでは、最大距離が 5 語以内で AABB を任意の順序で検索します。For example, the following query searches for AA and BB, in either order, within a maximum distance of five.

CONTAINS(column_name, 'NEAR((AA,BB),5)')  

文字列 AA one two three four five BB と一致します。The string AA one two three four five BB would be a match. 次の例のクエリでは、最大距離が 5 語以内で AABB、および CC の 3 つの検索語句を指定しています。In the following example, the query specifies for three search terms, AA, BB, and CC within a maximum distance of five:

CONTAINS(column_name, 'NEAR((AA,BB,CC),5)')  

このクエリでは、総距離が 5 語の次の文字列と一致します。This query would match the following string, in which the total distance is five:

BB one two CC three four five A A

間に含まれている検索語句の CC はカウントされないことに注意してください。Notice that the inner search term, CC, is not counted.

MAXMAX
距離に関係なく、指定した語句が含まれているすべての行を返します。Returns any rows that contain the specified terms regardless of the distance between them. これは既定値です。This is the default.

<match_order><match_order>
検索クエリによって返されるためには、語句が指定した順序で含まれている必要があるかどうかを指定します。Specifies whether the terms must occur in the specified order to be returned by a search query. <match_order> を指定するには、<maximum_distance> も指定する必要があります。To specify <match_order>, you must also specify <maximum_distance>.

<match_order> には、次のいずれかの値を指定します。<match_order> takes one of the following values:

TRUETRUE
語句の指定した順序が適用されます。Enforces the specified order within terms. たとえば、NEAR(A,B) は、A ... B とだけ一致します。For example, NEAR(A,B) would match only A ... B.

FALSEFALSE
指定した順序を無視します。Ignores the specified order. たとえば、NEAR(A,B) は、A ... BB ... A の両方と一致します。For example, NEAR(A,B) would match both A ... B and B ... A.

これは既定値です。This is the default.

たとえば、次の近接語句では、距離に関係なく、"Monday"、"Tuesday"、および "Wednesday" という単語を指定した順序で検索します。For example, the following proximity term searches the words "Monday", "Tuesday", and "Wednesday" in the specified order with regardless of the distance between them:

CONTAINS(column_name, 'NEAR ((Monday, Tuesday, Wednesday), MAX, TRUE)')  

カスタム近接語句の使用方法の詳細については、「NEAR による他の単語の近くにある単語の検索」を参照してください。For more information about using custom proximity terms, see Search for Words Close to Another Word with NEAR.

<weighted_term><weighted_term>
クエリによって取得された一致する行と、単語または語句のリストが照合されます。このリストの単語や語句のそれぞれには、オプションで重み付け値が指定されます。Specifies that the matching rows (returned by the query) match a list of words and phrases, each optionally given a weighting value.

ISABOUTISABOUT
<weighted_term> キーワードを指定します。Specifies the <weighted_term> keyword.

WEIGHT(weight_value)WEIGHT(weight_value)
0.0 から 1.0 の間で重み値を指定します。Specifies a weight value, which is a number from 0.0 through 1.0. <weighted_term> 内の各コンポーネントには、weight_value を含めることができます。Each component in <weighted_term> may include a weight_value. weight_value は、クエリのさまざまな部分に影響を与える、クエリに一致する各行に割り当てられる順位値を変更することです。weight_value is a way to change how various portions of a query affect the rank value assigned to each row matching the query. WEIGHT は CONTAINS クエリの結果に影響しませんが、WEIGHT は CONTAINSTABLE クエリ内のランクに影響します。WEIGHT does not affect the results of CONTAINS queries, but WEIGHT impacts rank in CONTAINSTABLE queries.

注意

小数点区切り文字は、オペレーティング システムのロケールにかかわらず常にピリオドです。The decimal separator is always a period, regardless of the operating system locale.

{ AND | & } | { AND NOT | &!{ AND | & } | { AND NOT | &! } | { OR | | }} | { OR | | }
2 つの contains 検索条件の間の論理演算を指定します。Specifies a logical operation between two contains search conditions.

{ AND | & }{ AND | & }
一致条件として、2 つの contains 検索条件を満たすことを指定します。Indicates that the two contains search conditions must be met for a match. アンパサンド記号 (&) は、AND キーワードの代わりに使用して、AND 演算子を表すことができます。The ampersand symbol (&) may be used instead of the AND keyword to represent the AND operator.

{ AND NOT | &!{ AND NOT | &! }}
2 番目の検索条件が存在しないことを、一致条件として指定します。Indicates that the second search condition must not be present for a match. アンパサンドとその次の感嘆符 (&!) は、AND NOT キーワードの代わりに使用して、AND NOT 演算子を表すことができます。The ampersand followed by the exclamation mark symbol (&!) may be used instead of the AND NOT keyword to represent the AND NOT operator.

{ OR | | }{ OR | | }
一致条件として、2 つの contains 検索条件のいずれかを満たすことを指定します。Indicates that either of the two contains search conditions must be met for a match. 垂直バー記号 (|) は、OR キーワードの代わりに使用して、OR 演算子を表すことができます。The bar symbol (|) may be used instead of the OR keyword to represent the OR operator.

<contains_search_condition> 内にかっこで囲まれたグループが含まれる場合は、かっこで囲まれたグループが最初に評価されます。When <contains_search_condition> contains parenthesized groups, these parenthesized groups are evaluated first. かっこで囲まれたグループを評価した後は、contains 検索条件で使用される論理演算子に対して次の規則が適用されます。After evaluating parenthesized groups, these rules apply when using these logical operators with contains search conditions:

  • NOT は AND より先に適用されます。NOT is applied before AND.

  • NOT は AND NOT のように、AND の後にだけ指定できます。NOT can only occur after AND, as in AND NOT. OR NOT 演算子は使用できません。The OR NOT operator is not allowed. NOT は最初の条件の前に指定できません。NOT cannot be specified before the first term. たとえば、CONTAINS (mycolumn, 'NOT "phrase_to_search_for" ' ) は無効になります。For example, CONTAINS (mycolumn, 'NOT "phrase_to_search_for" ' ) is not valid.

  • AND は OR より先に適用されます。AND is applied before OR.

  • 同じタイプの論理演算子 (AND、OR) は結合されるので、任意の順番で適用できます。Boolean operators of the same type (AND, OR) are associative and can therefore be applied in any order.

nn
複数の CONTAINS 検索条件と、条件内の複数の語を指定できることを示すプレースホルダーです。Is a placeholder indicating that multiple CONTAINS search conditions and terms within them can be specified.

全般的な解説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.

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

リモート サーバーのクエリ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 and their size. もう 1 つの注意事項は、LIKE ではテーブル全体の単純なパターンのスキャンしか実行されないことです。Another consideration is that LIKE performs only a simple pattern scan of an entire table. これに対し、フルテキスト クエリでは、言語が識別され、インデックスの作成時やクエリの実行時に、ストップワードのフィルター処理、類義語辞典と変化形の拡張の作成など、特定の変換が適用されます。A full-text query, in contrast, is language aware, applying specific transformations at index and query time, such as filtering stopwords and making thesaurus and inflectional expansions. これらの変換により、フルテキスト クエリの再呼び出しの精度および結果の最終的なランク付けを向上させることができます。These transformations help full-text queries improve their recall and the final ranking of their results.

検索する列のリストを指定することで、複数の列に対してクエリを実行できます。You can query multiple columns by specifying a list of columns to search. クエリを実行する列は同じテーブルに含まれている必要があります。The columns must be from the same table.

たとえば、次の CONTAINS クエリでは、Red サンプル データベースの Name テーブルの Color 列と Production.Product 列内で、AdventureWorks2012AdventureWorks2012 という語句を検索します。For example, the following CONTAINS query searches for the term Red in the Name and Color columns of the Production.Product table of the AdventureWorks2012AdventureWorks2012 sample database.

Use AdventureWorks2012;  
GO  
SELECT Name, Color   
FROM Production.Product  
WHERE CONTAINS((Name, Color), 'Red');  

Examples

A.A. CONTAINS を <simple_term> と共に使用するUsing CONTAINS with <simple_term>

次の例では、 $80.99 という単語を含み、価格が Mountain であるすべての製品を検索します。The following example finds all products with a price of $80.99 that contain the word Mountain.

USE AdventureWorks2012;  
GO  
SELECT Name, ListPrice  
FROM Production.Product  
WHERE ListPrice = 80.99  
   AND CONTAINS(Name, 'Mountain');  
GO  

B.B. CONTAINS と語句を <simple_term> と共に使用するUsing CONTAINS and phrase with <simple_term>

次の例では、Mountain または Road のいずれかの語句が含まれている、すべての製品を返します。The following example returns all products that contain either the phrase Mountain or Road.

USE AdventureWorks2012;  
GO  
SELECT Name  
FROM Production.Product  
WHERE CONTAINS(Name, ' Mountain OR Road ')  
GO  

C.C. CONTAINS を <prefix_term> と共に使用するUsing CONTAINS with <prefix_term>

次の例では、Name 列の中で、chain というプレフィックスで始まる 1 つ以上の単語が含まれている、すべての製品名を返します。The following example returns all product names with at least one word starting with the prefix chain in the Name column.

USE AdventureWorks2012;  
GO  
SELECT Name  
FROM Production.Product  
WHERE CONTAINS(Name, ' "Chain*" ');  
GO  

D.D. CONTAINS および OR を <prefix_term> と共に使用するUsing CONTAINS and OR with <prefix_term>

次の例では、chain または full のいずれかのプレフィックスを持つ文字列が含まれている、すべてのカテゴリ説明を返します。The following example returns all category descriptions containing strings with prefixes of either chain or full.

USE AdventureWorks2012;  
GO  
SELECT Name  
FROM Production.Product  
WHERE CONTAINS(Name, '"chain*" OR "full*"');  
GO  

E.E. CONTAINS を <proximity_term> と共に使用するUsing CONTAINS with <proximity_term>

適用対象: SQL Server 2012 (11.x)SQL Server 2012 (11.x) 以降。Applies to: SQL Server 2012 (11.x)SQL Server 2012 (11.x) and later.

次の例では、Production.ProductReview テーブルを対象として、10 語以内の距離で bike と "control" という単語を含むすべてのコメントを、指定した順序 (つまり、"bike"、"control" の順) で検索します。The following example searches the Production.ProductReview table for all comments that contain the word bike within 10 terms of the word "control" and in the specified order (that is, where "bike" precedes "control").

USE AdventureWorks2012;  
GO  
SELECT Comments  
FROM Production.ProductReview  
WHERE CONTAINS(Comments , 'NEAR((bike,control), 10, TRUE)');  
GO  

F.F. CONTAINS を <generation_term> と共に使用するUsing CONTAINS with <generation_term>

次の例では、ride を原型とする riding、ridden などの単語が含まれている、すべての製品を検索します。The following example searches for all products with words of the form ride: riding, ridden, and so on.

USE AdventureWorks2012;  
GO  
SELECT Description  
FROM Production.ProductDescription  
WHERE CONTAINS(Description, ' FORMSOF (INFLECTIONAL, ride) ');  
GO  

G.G. CONTAINS を <weighted_term> と共に使用するUsing CONTAINS with <weighted_term>

次の例では、performancecomfortable、または smooth という単語を含むすべての製品名を検索します。各単語にはそれぞれ異なる重み付けが割り当てられています。The following example searches for all product names containing the words performance, comfortable, or smooth, and different weights are given to each word.

USE AdventureWorks2012;  
GO  
SELECT Description  
FROM Production.ProductDescription  
WHERE CONTAINS(Description, 'ISABOUT (performance weight (.8),   
comfortable weight (.4), smooth weight (.2) )' );  
GO  

H.H. CONTAINS を変数と共に使用するUsing CONTAINS with variables

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

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

I.I. CONTAINS を論理演算子 (AND) と共に使用するUsing CONTAINS with a logical operator (AND)

次の例では、 AdventureWorks2012AdventureWorks2012 データベースの ProductDescription テーブルを使用します。The following example uses the ProductDescription table of the AdventureWorks2012AdventureWorks2012 database. このクエリでは、CONTAINS 述語を使用して、説明 ID が 5 以外で、説明に Aluminumspindle という両方の単語が含まれている説明を検索します。The query uses the CONTAINS predicate to search for descriptions in which the description ID is not equal to 5 and the description contains both the word Aluminum and the word spindle. 検索条件では、AND ブール演算子を使用します。The search condition uses the AND Boolean operator.

USE AdventureWorks2012;  
GO  
SELECT Description  
FROM Production.ProductDescription  
WHERE ProductDescriptionID <> 5 AND  
   CONTAINS(Description, 'Aluminum AND spindle');  
GO  

J.J. CONTAINS を使用して行の挿入を確認するUsing CONTAINS to verify a row insertion

次の例では、SELECT サブクエリ内で CONTAINS を使用します。The following example uses CONTAINS within a SELECT subquery. AdventureWorks2012AdventureWorks2012 データベースを使用して、クエリは特定の自転車の ProductReview テーブルですべてのコメントのコメント値を取得します。Using the AdventureWorks2012AdventureWorks2012 database, the query obtains the comment value of all the comments in the ProductReview table for a particular cycle. 検索条件では、AND ブール演算子を使用します。The search condition uses the AND Boolean operator.

USE AdventureWorks2012;  
GO  
INSERT INTO Production.ProductReview   
  (ProductID, ReviewerName, EmailAddress, Rating, Comments)   
VALUES  
  (780, 'John Smith', 'john@fourthcoffee.com', 5,   
'The Mountain-200 Silver from AdventureWorks2008 Cycles meets and exceeds expectations. I enjoyed the smooth ride down the roads of Redmond');  
  
-- Given the full-text catalog for these tables is Adv_ft_ctlg,   
-- with change_tracking on so that the full-text indexes are updated automatically.  
WAITFOR DELAY '00:00:30';     
-- Wait 30 seconds to make sure that the full-text index gets updated.  
  
SELECT r.Comments, p.Name  
FROM Production.ProductReview AS r  
JOIN Production.Product AS p   
    ON r.ProductID = p.ProductID  
    AND r.ProductID = (SELECT ProductID  
FROM Production.ProductReview  
WHERE CONTAINS (Comments,   
    ' AdventureWorks2008 AND   
    Redmond AND   
    "Mountain-200 Silver" '));  
GO  

K.K. ドキュメント プロパティに対してクエリを実行するQuerying on a document property

適用対象: SQL Server 2012 (11.x)SQL Server 2012 (11.x) 以降。Applies to: SQL Server 2012 (11.x)SQL Server 2012 (11.x) and later.

次のクエリでは、Title テーブルの Document 列内で、インデックス化されたプロパティ Production.Document を検索します。The following query searches on an indexed property, Title, in the Document column of the Production.Document table. このクエリは、Title または Maintenance という文字列が Repair プロパティに含まれているドキュメントのみを返します。The query returns only documents whose Title property contains the string Maintenance or Repair.

注意

プロパティ検索で行が返されるためには、インデックスの作成中に列を解析するフィルターによって、指定されたプロパティが抽出される必要があります。For a property-search to return rows, the filter or filters that parse the column during indexing must extract the specified property. また、指定されたテーブルのフルテキスト インデックスが、プロパティを含めるように構成されている必要があります。Also, the full-text index of the specified table must have been configured to include the property. 詳細については、「 検索プロパティ リストを使用したドキュメント プロパティの検索」を参照してください。For more information, see Search Document Properties with Search Property Lists.

Use AdventureWorks2012;  
GO  
SELECT Document 
FROM Production.Document  
WHERE CONTAINS(PROPERTY(Document,'Title'), 'Maintenance OR Repair');  
GO  

参照See Also

フルテキスト検索の概要 Get Started with Full-Text Search
フルテキスト カタログの作成と管理 Create and Manage Full-Text Catalogs
CREATE FULLTEXT CATALOG (Transact-SQL) CREATE FULLTEXT CATALOG (Transact-SQL)
CREATE FULLTEXT INDEX (Transact-SQL) CREATE FULLTEXT INDEX (Transact-SQL)
フルテキスト インデックスの作成と管理 Create and Manage Full-Text Indexes
フルテキスト検索でのクエリ Query with Full-Text Search
CONTAINSTABLE (Transact-SQL) CONTAINSTABLE (Transact-SQL)
FREETEXT (Transact-SQL) FREETEXT (Transact-SQL)
FREETEXTTABLE (Transact-SQL) FREETEXTTABLE (Transact-SQL)
フルテキスト検索でのクエリ Query with Full-Text Search
フルテキスト検索 Full-Text Search
フルテキスト検索クエリの作成 (Visual Database Tools) Create Full-Text Search Queries (Visual Database Tools)
WHERE (Transact-SQL) WHERE (Transact-SQL)
検索プロパティ リストを使用したドキュメント プロパティの検索Search Document Properties with Search Property Lists