CONTAINSTABLE (Transact-SQL)CONTAINSTABLE (Transact-SQL)

適用対象:Applies to: はいSQL ServerSQL Server (サポートされているすべてのバージョン) yesSQL ServerSQL Server (all supported versions) はいAzure SQL データベースAzure SQL DatabaseYesAzure SQL データベースAzure SQL Database適用対象:Applies to: はいSQL ServerSQL Server (サポートされているすべてのバージョン) yesSQL ServerSQL Server (all supported versions) はいAzure SQL データベースAzure SQL DatabaseYesAzure SQL データベースAzure SQL Database

1つの単語や語句に対する完全一致またはあいまいな一致を含む列に対して、0行、1行、または複数の行から成るテーブルを返します。特定の範囲内での近接語句、または重み付け一致が含まれます。Returns a table of zero, one, or more rows for those columns containing precise or fuzzy (less precise) matches to single words and phrases, the proximity of words within a certain distance of one another, or weighted matches. CONTAINSTABLE は、SELECT ステートメントのfrom 句で使用され、 Transact-SQLTransact-SQL 通常のテーブル名のように参照されます。CONTAINSTABLE is used in the FROM clause of a Transact-SQLTransact-SQL SELECT statement and is referenced as if it were a regular table name. これは、 SQL ServerSQL Server 文字ベースのデータ型を含むフルテキストインデックス列に対してフルテキスト検索を実行します。It performs a SQL ServerSQL Server full-text search on full-text indexed columns containing character-based data types.

CONTAINSTABLE は、 contains 述語と同じ種類の一致に便利であり、contains と同じ検索条件を使用します。CONTAINSTABLE is useful for the same kinds of matches as the CONTAINS predicate and uses the same search conditions as CONTAINS.

ただし、CONTAINS とは異なり、CONTAINSTABLE を使用するクエリでは、各行の関連順位値 (RANK) とフルテキストキー (キー) が返されます。Unlike CONTAINS, however, queries using CONTAINSTABLE return a relevance ranking value (RANK) and full-text key (KEY) for each row. 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

  
CONTAINSTABLE   
( table , { column_name | ( column_list ) | * } , ' <contains_search_condition> '   
     [ , LANGUAGE language_term]   
  [ , top_n_by_rank ]   
)   
  
<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 ]   
    )  
  

引数Arguments

テーブルtable
フルテキストインデックスが作成されているテーブルの名前を指定します。Is the name of a table that has been full-text indexed. テーブルには、1、2、3、または4つの要素で構成されるデータベースオブジェクト名を指定できます。table can be a one-, two-, three-, or four-part database object name. ビューに対してクエリを実行する場合は、フルテキスト インデックスが作成されたベース テーブルを 1 つだけ指定できます。When querying a view, only one full-text indexed base table can be involved.

テーブルにサーバー名を指定することはできません。また、リンクサーバーに対するクエリでは使用できません。table cannot specify a server name and cannot be used in queries against linked servers.

column_namecolumn_name
フルテキスト検索用にインデックスが作成される 1 つ以上の列の名前を指定します。Is the name of one or more columns that are indexed for full-text searching. 列には、charvarcharncharnvarchartextntextimagexmlvarbinaryvarbinary(max) のいずれかの型を指定できます。The columns can be of type char, varchar, nchar, nvarchar, text, ntext, image, xml, varbinary, or varbinary(max).

column_listcolumn_list
コンマ区切りで複数の列を指定できます。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.

*
指定された検索条件を検索するために、テーブル内のすべてのフルテキストインデックス列を使用することを指定します。Specifies that all full-text indexed columns in table should be used to search for the given search condition. language_term を指定しない場合、テーブルのすべての列の言語は同じである必要があります。Unless language_term is specified, the language of all columns of the table must be the same.

LANGUAGE language_termLANGUAGE language_term
クエリの一部として、単語区切り、ステミング、類義語辞典、およびノイズワード (またはストップワード) の削除に使用するリソースの言語を指定します。Is the language whose resources will be used for word breaking, stemming, and thesaurus and noise-word (or 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.sys言語の互換性ビューのalias列の値に対応します。When specified as a string, language_term corresponds to the alias column value in the sys.syslanguages 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.

指定した言語が無効であるか、その言語に該当するリソースがインストールされていない場合は、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.

top_n_by_ranktop_n_by_rank
一致したものの中から、降順で順位の高い方からn 個だけを返すことを指定します。Specifies that only the n highest ranked matches, in descending order, are returned. 整数値nが指定されている場合にのみ適用されます。Applies only when an integer value, n, is specified. top_n_by_rank を他のパラメーターと組み合わせた場合、クエリから返される行数は、実際にすべての述語に一致する行数より少なくなります。If top_n_by_rank is combined with other parameters, the query could return fewer rows than the number of rows that actually match all the predicates. top_n_by_rankを使用すると、最も関連性の高いヒットだけを再度呼び出すことで、クエリのパフォーマンスを向上させることができます。top_n_by_rank allows you to increase query performance by recalling only the most relevant hits.

<contains_search_condition><contains_search_condition>
column_name で検索するテキストと、その一致条件を指定します。Specifies the text to search for in column_name and the conditions for a match. 検索条件の詳細については、「 CONTAINS (transact-sql)」を参照してください。For information about search conditions, see CONTAINS (Transact-SQL).

RemarksRemarks

フルテキストの述語と関数の対象は、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.

返されるテーブルには、フルテキストキー値を含むkeyという名前の列があります。The table returned has a column named KEY that contains full-text key values. フルテキストインデックスが作成された各テーブルには、値が一意であることが保証される列があります。また、キー列に返される値は、contains 検索条件で指定された選択基準に一致する行のフルテキストキー値です。Each full-text indexed table has a column whose values are guaranteed to be unique, and the values returned in the KEY column are the full-text key values of the rows that match the selection criteria specified in the contains search condition. OBJECTPROPERTYEX 関数から取得されたTableFulltextKeyColumnプロパティは、この一意のキー列の id を提供します。The TableFulltextKeyColumn property, obtained from the OBJECTPROPERTYEX function, provides the identity of this unique key column. フルテキストインデックスのフルテキストキーに関連付けられている列の ID を取得するには、 fulltext_indexesを使用します。To obtain the ID of the column associated with the full-text key of the full-text index, use sys.fulltext_indexes. 詳細については、「 sys. fulltext_indexes (transact-sql)」を参照してください。For more information, see sys.fulltext_indexes (Transact-SQL).

元のテーブルから目的の行を取得するには、CONTAINSTABLE 行との結合を指定してください。To obtain the rows you want from the original table, specify a join with the CONTAINSTABLE rows. CONTAINSTABLE を使用する場合、通常は次の形式で FROM 句を SELECT ステートメントに指定します。The typical form of the FROM clause for a SELECT statement using CONTAINSTABLE is:

SELECT select_list  
FROM table AS FT_TBL INNER JOIN  
   CONTAINSTABLE(table, column, contains_search_condition) AS KEY_TBL  
   ON FT_TBL.unique_key_column = KEY_TBL.[KEY];  

CONTAINSTABLE によって生成されるテーブルには、 RANKという名前の列が含まれています。The table produced by CONTAINSTABLE includes a column named RANK. RANK列は、行が選択基準にどの程度一致しているかを示す値 (0 ~ 1000) です。The RANK column is a value (from 0 through 1000) for each row indicating how well a row matched the selection criteria. この順位値は、通常、SELECT ステートメント内の次のいずれかの方法で使用されます。This rank value is typically used in one of these ways in the SELECT statement:

  • ORDER BY 句で、テーブルの最初の行として最も順位の高い行を返します。In the ORDER BY clause to return the highest-ranking rows as the first rows in the table.

  • 選択リストで、各行に割り当てられた順位値を表示します。In the select list to see the rank value assigned to each row.

アクセス許可Permissions

実行権限は、テーブルまたは参照先テーブルの列に対する適切な SELECT 権限を持つユーザーのみが使用できます。Execute permissions are available only by users with the appropriate SELECT privileges on the table or the referenced table's columns.

Examples

A.A. 簡単な例Simple Example

次の例では、2つの列からなる単純なテーブルを作成し、そのフラグの3つの市区郡と色を一覧表示します。The following example creates and populates a simple table of two columns, listing 3 counties and the colors in their flags. このメソッドは、テーブルにフルテキストカタログとインデックスを作成して設定します。The it creates and populates a full-text catalog and index on the table. 次に、 CONTAINSTABLE構文を示します。Then the CONTAINSTABLE syntax is demonstrated. この例では、検索値が複数回満たされたときに順位値がどのように増加するかを示します。This example demonstrates how the rank value grows higher when the search value is met multiple times. 最後のクエリでは、"緑" と "黒" の両方が含まれているタンザニアは、クエリされた色の1つのみを含む、イタリアよりも高いランクを持ちます。In the last query, Tanzania which contains both green and black has a higher rank than Italy which contain only one of the queried colors.

CREATE TABLE Flags (Country nvarchar(30) NOT NULL, FlagColors varchar(200));  
CREATE UNIQUE CLUSTERED INDEX FlagKey ON Flags(Country);  
INSERT Flags VALUES ('France', 'Blue and White and Red');  
INSERT Flags VALUES ('Italy', 'Green and White and Red');  
INSERT Flags VALUES ('Tanzania', 'Green and Yellow and Black and Yellow and Blue');  
SELECT * FROM Flags;  
GO  
  
CREATE FULLTEXT CATALOG TestFTCat;  
CREATE FULLTEXT INDEX ON Flags(FlagColors) KEY INDEX FlagKey ON TestFTCat;  
GO   
  
SELECT * FROM Flags;  
SELECT * FROM CONTAINSTABLE (Flags, FlagColors, 'Green') ORDER BY RANK DESC;  
SELECT * FROM CONTAINSTABLE (Flags, FlagColors, 'Green or Black') ORDER BY RANK DESC;  

B:B. 順位値を返すReturning rank values

次の例では、"frame"、"wheel"、または "tire" という単語を含むすべての製品名を検索します。各単語にはさまざまな重みが割り当てられています。The following example searches for all product names containing the words "frame," "wheel," or "tire," and different weights are given to each word. これらの検索条件に一致する行が返されるたびに、一致の相対的な近さ (順位付け値) が表示されます。For each returned row matching these search criteria, the relative closeness (ranking value) of the match is shown. また、最も順位値の高い行を最初に返します。In addition, the highest ranking rows are returned first.

USE AdventureWorks2012;  
GO  
  
SELECT FT_TBL.Name, KEY_TBL.RANK  
    FROM Production.Product AS FT_TBL   
        INNER JOIN CONTAINSTABLE(Production.Product, Name,   
        'ISABOUT (frame WEIGHT (.8),   
        wheel WEIGHT (.4), tire WEIGHT (.2) )' ) AS KEY_TBL  
            ON FT_TBL.ProductID = KEY_TBL.[KEY]  
ORDER BY KEY_TBL.RANK DESC;  
GO  

C:C. 指定された値より大きい順位値を返すReturning rank values greater than a specified value

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

次の例では、NEAR を使用して、bracket テーブルで、相互に近接する "reflector" および "Production.Document" を検索します。The following example uses NEAR to search for "bracket" and "reflector" close to each other in the Production.Document table. また、順位値が 50 以上の行だけを返します。Only rows with a rank value of 50 or higher are returned.

USE AdventureWorks2012  
GO  
  
SELECT DocumentNode, Title, DocumentSummary  
FROM Production.Document AS DocTable   
INNER JOIN CONTAINSTABLE(Production.Document, Document,  
  'NEAR(bracket, reflector)' ) AS KEY_TBL  
  ON DocTable.DocumentNode = KEY_TBL.[KEY]  
WHERE KEY_TBL.RANK > 50  
ORDER BY KEY_TBL.RANK DESC;  
GO  

注意

フルテキストクエリで最大距離として整数が指定されていない場合、ギャップが100の論理用語を超えるヒットのみを含むドキュメントは、NEAR の要件を満たしておらず、順位が0になります。If a full-text query does not specify an integer as the maximum distance, a document that contains only hits whose gap is greater than 100 logical terms will not meet the NEAR requirements, and its ranking will be 0.

D:D. top_n_by_rank を使用して上位 5 個の結果を返すReturning top 5 ranked results using top_n_by_rank

次の例では、Description 列内で "light" または "lightweight" という単語の近くに "aluminum" という語句を含んでいる、上位 5 種の製品の説明を返します。The following example returns the description of the top 5 products where the Description column contains the word "aluminum" near either the word "light" or the word "lightweight".

USE AdventureWorks2012;  
GO  
  
SELECT FT_TBL.ProductDescriptionID,  
   FT_TBL.Description,   
   KEY_TBL.RANK  
FROM Production.ProductDescription AS FT_TBL INNER JOIN  
   CONTAINSTABLE (Production.ProductDescription,  
      Description,   
      '(light NEAR aluminum) OR  
      (lightweight NEAR aluminum)',  
      5  
   ) AS KEY_TBL  
   ON FT_TBL.ProductDescriptionID = KEY_TBL.[KEY];  
GO  

GO

E.E. LANGUAGE 引数を指定するSpecifying the LANGUAGE argument

引数を使用する例を次に示し LANGUAGE ます。The following example shows using the LANGUAGE argument.

USE AdventureWorks2012;  
GO  
  
SELECT FT_TBL.ProductDescriptionID,  
   FT_TBL.Description,   
   KEY_TBL.RANK  
FROM Production.ProductDescription AS FT_TBL INNER JOIN  
   CONTAINSTABLE (Production.ProductDescription,  
      Description,   
      '(light NEAR aluminum) OR  
      (lightweight NEAR aluminum)',  
      LANGUAGE N'English',  
      5  
   ) AS KEY_TBL  
   ON FT_TBL.ProductDescriptionID = KEY_TBL.[KEY];  
GO  

注意

Top_n_by_rank を使用するために必要な言語language_term引数 The LANGUAGE language_term argumentis not required for using top_n_by_rank.

関連項目See Also

ランクを使用して検索結果を制限する Limit Search Results with RANK
フルテキスト検索でのクエリ Query with Full-Text Search
フルテキスト検索クエリの作成 (Visual Database Tools) Create Full-Text Search Queries (Visual Database Tools)
Transact-sql)を含む ( CONTAINS (Transact-SQL)
フルテキスト検索でのクエリ Query with Full-Text Search
SELECT (Transact-SQL) SELECT (Transact-SQL)
FROM (Transact-SQL)FROM (Transact-SQL)