フルテキスト検索でのクエリQuery with Full-Text Search

適用対象: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

述語の CONTAINS および FREETEXT と、行セット値関数の CONTAINSTABLEFREETEXTTABLESELECT ステートメントと使用し、フルテキスト クエリを記述します。Write full-text queries by using the predicates CONTAINS and FREETEXT and the rowset-valued functions CONTAINSTABLE and FREETEXTTABLE with a SELECT statement. この記事では、各述語と関数の例と、使用に最適なものを選択する方法を説明します。This article provides examples of each predicate and function and helps you choose the best one to use.

  • 単語や語句と一致させるには、CONTAINSCONTAINSTABLE を使用します。To match words and phrases, use CONTAINS and CONTAINSTABLE.
  • 単語そのものではなく意味と一致させるには、FREETEXTFREETEXTTABLE を使用します。To match the meaning, but not the exact wording, use FREETEXT and FREETEXTTABLE.

各述語と関数の例Examples of each predicate and function

次の例では、AdventureWorks サンプル データベースを使用します。The following examples use the AdventureWorks sample database. AdventureWorks の最終リリースについては、「AdventureWorks Databases and Scripts for SQL Server 2016 CTP3」(SQL Server 2016 CTP3 の AdventureWorks データベースとスクリプト) をご覧ください。For the final release of AdventureWorks, see AdventureWorks Databases and Scripts for SQL Server 2016 CTP3. サンプル クエリを実行するには、フルテキスト検索も設定する必要があります。To run the sample queries, you also have to set up Full-Text Search. 詳細については、「Query with Full-Text Search」 (フルテキスト検索でのクエリ) を参照してください。For more info, see Get Started with Full-Text Search.

例: CONTAINSExample - CONTAINS

次の例では、$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  

例: FREETEXTExample - FREETEXT

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

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

例: CONTAINSTABLEExample - CONTAINSTABLE

次の例では、Description 列の "light" または "lightweight" という語の近くに "aluminum" という語があるすべての製品の説明 ID と説明を返します。The following example returns the description ID and description of all products for which the Description column contains the word "aluminum" near either the word "light" or the word "lightweight." また、順位が 2 以上の行だけを返します。Only rows with a rank of 2 or higher are returned.

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)'  
   ) AS KEY_TBL  
   ON FT_TBL.ProductDescriptionID = KEY_TBL.[KEY]  
WHERE KEY_TBL.RANK > 2  
ORDER BY KEY_TBL.RANK DESC;  
GO  

例 - FREETEXTTABLEExample - FREETEXTTABLE

次の例では、FREETEXTTABLE クエリを拡張して、順位の高いものから順に行を返し、各行の順位を選択リストに追加します。The following example extends a FREETEXTTABLE query to return the highest ranked rows first and to add the ranking of each row to the select list. 類似のクエリを記述するには、ProductDescriptionIDProductDescription テーブルの一意なキー列であることを知っている必要があります。To write a similar query, you have to know that ProductDescriptionID is the unique key column for the ProductDescription table.

USE AdventureWorks2012  
GO  
  
SELECT KEY_TBL.RANK, FT_TBL.Description  
FROM Production.ProductDescription AS FT_TBL   
     INNER JOIN  
     FREETEXTTABLE(Production.ProductDescription, Description,  
                    'perfect all-around bike') AS KEY_TBL  
     ON FT_TBL.ProductDescriptionID = KEY_TBL.[KEY]  
ORDER BY KEY_TBL.RANK DESC  
GO  

以下に、同じクエリを拡張して、順位が 10 以上の行だけを返す例を示します。Here is an extension of the same query that only returns rows with a rank of 10 or greater:

USE AdventureWorks2012  
GO  
  
SELECT KEY_TBL.RANK, FT_TBL.Description  
FROM Production.ProductDescription AS FT_TBL   
     INNER JOIN  
     FREETEXTTABLE(Production.ProductDescription, Description,  
                    'perfect all-around bike') AS KEY_TBL  
     ON FT_TBL.ProductDescriptionID = KEY_TBL.[KEY]  
WHERE KEY_TBL.RANK >= 10  
ORDER BY KEY_TBL.RANK DESC  
GO  

単語の一致または意味の一致Match words or match meaning

CONTAINS/CONTAINSTABLEFREETEXT/FREETEXTTABLE は、別種の照合に役立ちます。CONTAINS/CONTAINSTABLE and FREETEXT/FREETEXTTABLE are useful for different kinds of matching. 次の情報は、クエリに適した述語または関数の選択に役立ちます。The following info helps you to choose the best predicate or function for your query:

CONTAINS/CONTAINSTABLECONTAINS/CONTAINSTABLE

  • 完全一致またはあいまい一致 (より低い精度での一致) する単語または語句を照合できます。Match single words and phrases with precise or fuzzy (less precise) matching.
  • 次の操作を行うこともできます。You can also do the following things:
    • 単語が互いに特定の範囲内でどれくらい近いかを指定する。Specify the proximity of words within a certain distance of one another.
    • 一致するものを重み付きで返す。Return weighted matches.
    • 論理演算子で検索条件を結合する。Combine search conditions with logical operators. 詳しくは、この記事の後半の「ブール演算子 AND、OR、および NOT の使用」をご覧ください。For more info, see Using Boolean operators (AND, OR, and NOT) later in this article.

FREETEXT/FREETEXTTABLEFREETEXT/FREETEXTTABLE

  • 指定した単語、語句、または文章 ("freetext 文字列") の正確な文字列の並びではなく、意味を照合できます。Match the meaning, but not the exact wording, of specified words, phrases, or sentences (the freetext string).
  • 指定した列のフルテキスト インデックスに、用語または一定の形式の用語が見つかった場合は、一致すると判断されます。Matches are generated if any term or form of any term is found in the full-text index of a specified column.

述語と関数を比較するCompare predicates and functions

述語 CONTAINS/FREETEXT と行セット値関数 CONTAINSTABLE/FREETEXTTABLE の構文とオプションは異なります。The predicates CONTAINS/FREETEXT and the rowset-valued functions CONTAINSTABLE/FREETEXTTABLE have different syntax and options. 次の情報は、クエリに適した述語または関数の選択に役立ちます。The following info helps you to choose the best predicate or function for your query:

述語 CONTAINS と FREETEXTPredicates CONTAINS and FREETEXT

使用方法Usage. CONTAINS と FREETEXT のフルテキスト述語は、SELECT ステートメントの WHERE 句または HAVING 句で使用します。Use the full-text predicates CONTAINS and FREETEXT in the WHERE or HAVING clause of a SELECT statement.

結果Results. CONTAINS 述語と FREETEXT 述語では、特定の行がフルテキスト クエリと一致するかどうかを示す TRUE または FALSE の値が返されます。The CONTAINS and FREETEXT predicates return a TRUE or FALSE value that indicates whether a given row matches the full-text query. 一致する行は結果セットで返されます。Matching rows are returned in the result set.

その他のオプションMore options. 述語は、LIKE や BETWEEN など他の Transact-SQLTransact-SQL 述語と組み合わせて使用できます。You can combine the predicates with any of the other Transact-SQLTransact-SQL predicates, such as LIKE and BETWEEN.

テーブルの単一の列、一連の列、すべての列のいずれかを検索対象として指定できます。You can specify either a single column, a list of columns, or all columns in the table to be searched.

また、フルテキスト クエリで単語区切りとステミング、類義語辞典の検索、およびノイズ ワードの削除を行うために使用されるリソースの言語を指定することもできます。Optionally, you can specify the language whose resources are used by the full-text query for word breaking and stemming, thesaurus lookups, and noise-word removal.

この作業を終えると、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.

詳細情報More info. これらの述語の構文および引数の詳細については、「CONTAINS」と「FREETEXT」を参照してください。For more info about the syntax and arguments of these predicates, see CONTAINS and FREETEXT.

行セット値関数 CONTAINSTABLE と FREETEXTTABLERowset-valued functions CONTAINSTABLE and FREETEXTTABLE

使用方法Usage. CONTAINSTABLE 関数と FREETEXTTABLE 関数のフルテキスト関数は、SELECT ステートメントの FROM 句で通常のテーブル名と同じように使用します。Use the full-text functions CONTAINSTABLE and FREETEXTTABLE functions like a regular table name in the FROM clause of a SELECT statement.

これらのいずれかの関数を使用する場合には、検索するベース テーブルを指定する必要があります。You have to specify the base table to search when you use either of these functions. 述語と同様に、検索するテーブルの単一の列、一連の列、またはすべての列を指定できます。また、必要に応じて、指定したフルテキスト クエリで使用される言語リソースの言語を指定することもできます。As with the predicates, you can specify a single column, a list of columns, or all columns in the table to be searched, and optionally, the language whose resources are used by given full-text query.

通常、CONTAINSTABLE または FREETEXTTABLE の結果をベース テーブルと結合する必要があります。Typically you have to join the results of CONTAINSTABLE or FREETEXTTABLE with the base table. テーブルを結合するには、キー列の一意の名前を把握している必要があります。To join the tables, you have to know the unique key column name. この列は、フルテキスト処理に対応する各テーブルに含まれ、テーブルの行を一意にするために使用されます ("一意なキー列")。This column, which occurs in every full-text enabled table, is used to enforce unique rows for the table (the unique**key column). キー列の詳細については、「フルテキスト インデックスの作成と管理」をご覧ください。For more info about the key column, see Create and Manage Full-Text Indexes.

結果Results. これらの関数では、フルテキスト クエリと一致する 0 行、1 行、または 2 行以上で構成されるテーブルが返されます。These functions return a table of zero, one, or more rows that match the full-text query. 返されたテーブルには、ベース テーブルの行のうち、関数のフルテキスト検索条件に指定した選択基準に一致する行のみが含まれます。The returned table contains only rows from the base table that match the selection criteria specified in the full-text search condition of the function.

このいずれかの関数を使用するクエリでは、次のように、返される各行の関連順位値 (RANK) とフルテキスト キー (KEY) も返されます。Queries that use one of these functions also return a relevance ranking value (RANK) and full-text key (KEY) for each row returned, as follows:

  • KEY 列。KEY column. KEY 列には、返された行の一意の値が格納されます。The KEY column returns unique values of the returned rows. KEY 列は、選択基準を指定する際に使用できます。The KEY column can be used to specify selection criteria.
  • RANK 列。RANK column. RANK 列は、各行が選択条件にどの程度一致しているかを示す 順位値 を返します。The RANK column returns a rank value for each row that indicates how well the row matched the selection criteria. 行内のテキストまたはドキュメントの順位値が高いほど、指定したフルテキスト クエリとその行との関連性が高いことを示します。The higher the rank value of the text or document in a row, the more relevant the row is for the given full-text query. 複数の行に同じ順位が付けられる可能性があります。Different rows can be ranked identically. top_n_by_rank パラメーター (省略可能) を指定して、返される一致の数を制限することもできます。You can limit the number of matches to be returned by specifying the optional top_n_by_rank parameter. 詳細については、「 RANK を使用して検索結果を制限する方法」を参照してください。For more information, see Limit Search Results with RANK.

詳細情報More info. これらの関数の構文および引数の詳細については、「CONTAINSTABLE」と「FREETEXTTABLE」を参照してください。For more info about the syntax and arguments of these functions, see CONTAINSTABLE and FREETEXTTABLE.

特定の種類の検索Specific types of searches

特定の語または句 (単純語句) の検索Search for a specific word or phrase (Simple Term)

CONTAINSCONTAINSTABLEFREETEXT、または FREETEXTTABLE を使用すると、テーブルで特定の語または句を検索できます。You can use CONTAINS, CONTAINSTABLE, FREETEXT, or FREETEXTTABLE to search a table for a specific word or phrase. たとえば、データベースのProductReviewAdventureWorks2012AdventureWorks2012 テーブルで、製品に関する記述から "learning curve" という句が含まれるすべてのコメントを検索するには、次のように CONTAINS 述語を使用します。For example, if you want to search the ProductReview table in the AdventureWorks2012AdventureWorks2012 database to find all comments about a product with the phrase "learning curve," you could use the CONTAINS predicate as follows:

USE AdventureWorks2012  
GO  
  
SELECT Comments  
FROM Production.ProductReview  
WHERE CONTAINS(Comments, '"learning curve"')  
GO  

検索条件 (この場合は "learning curve") には、1 つ以上の語で構成される複雑な条件を指定できます。The search condition, in this case "learning curve," can be complex and can be composed of one or more terms.

単純語句検索に関する詳細情報More info about simple term searches

フルテキスト検索において、 (または トークン) とは、指定された言語の規則に従って適切なワード ブレーカーによって境界が識別された文字列です。In full-text search, a word (or token) is a string whose boundaries are identified by appropriate word breakers, following the linguistic rules of the specified language. 有効なは、複数の語から構成されます。句読点を含む場合も含まない場合もあります。A valid phrase consists of multiple words, with or without any punctuation marks between them.

たとえば、"croissant" は語、"café au lait" は句です。For example, "croissant" is a word, and "café au lait" is a phrase. このような語や句は単純語句と呼ばれています。Words and phrases such as these are called simple terms.

CONTAINS および CONTAINSTABLE は、句に完全一致するものを検索します。CONTAINS and CONTAINSTABLE look for an exact match for the phrase. FREETEXT および FREETEXTTABLE は、句を個々の語に分解します。FREETEXT and FREETEXTTABLE break up the phrase into separate words.

プレフィックス付きの語 (プレフィックス語句) の検索Search for a word with a prefix (Prefix Term)

CONTAINS または CONTAINSTABLE を使用すると、指定したプレフィックスを持つ語または句を検索することができます。You can use CONTAINS or CONTAINSTABLE to search for words or phrases with a specified prefix. 指定したプレフィックスで始まるテキストが含まれる列のすべてのエントリが返されます。All entries in the column that contain text beginning with the specified prefix are returned. たとえば、 topというプレフィックス ( top``pletop``pingtopなど) が含まれるすべての行を検索する場合、For example, to search for all rows that contain the prefix top-, as in top``ple, top``ping, and top. クエリは次の例のようになります。The query looks like the following example:

USE AdventureWorks2012  
GO  
  
SELECT Description, ProductDescriptionID  
FROM Production.ProductDescription  
WHERE CONTAINS (Description, '"top*"' )  
GO  

アスタリスク (*) より前のテキストに一致するすべてのテキストが返されます。All text that matches the text specified before the asterisk (*) is returned. CONTAINS (DESCRIPTION, 'top*')のように、テキストとアスタリスクを二重引用符で囲まなかった場合、フルテキスト検索ではアスタリスクはワイルドカードとして認識されません。If the text and asterisk are not delimited by double quotation marks, as in CONTAINS (DESCRIPTION, 'top*'), full-text search does not consider the asterisk to be a wildcard..

プレフィックス語句が句の場合、句を構成する各トークンは、それぞれ独立したプレフィックス語句と見なされます。When the prefix term is a phrase, each token making up the phrase is considered a separate prefix term. それらのプレフィックス語句で始まる語を持つすべての行が返されます。All rows that have words beginning with the prefix terms will be returned. たとえば、"light bread*" というプレフィックス語句を使用すると、"light breaded"、"lightly breaded"、または "light bread" というテキストを含む行が検索されますが、"lightly toasted bread" は対象から除外されます。For example, the prefix term "light bread*" will find rows with text of "light breaded," "lightly breaded," or "light bread," but it will not return "lightly toasted bread."

プレフィックス検索に関する詳細情報More info about prefix searches

プレフィックス語句とは、派生語または変化形を生成するために語の前に付けられる文字列です。A prefix term refers to a string that is affixed to the front of a word to produce a derivative word or an inflected form.

  • 1 つのプレフィックス語句の場合、指定したプレフィックス語句で始まるすべての語が、結果セットに含まれます。For a single prefix term, any word starting with the specified term will be part of the result set. たとえば、"auto*" は、"automatic"、"automobile" などに一致します。For example, the term "auto*" matches "automatic," "automobile," and so forth.

  • 句の場合、句を構成する各語がプレフィックス語句と見なされます。For a phrase, each word within the phrase is considered to be a prefix term. たとえば、"auto tran*" は "automatic transmission" や "automobile transducer" に一致しますが、"automatic motor transmission" には一致しません。For example, the term "auto tran*" matches "automatic transmission" and "automobile transducer," but it does not match "automatic motor transmission."

プレフィックス検索は CONTAINSCONTAINSTABLE でサポートされます。Prefix searches are supported by CONTAINS and CONTAINSTABLE.

特定の語の変化形 (生成語) の検索Search for inflectional forms of a specific word (Generation Term)

CONTAINSCONTAINSTABLEFREETEXT、または FREETEXTTABLE を使用すると、動詞のさまざまな時制および活用、または名詞の単数形と複数形 (変化形検索)、または特定の語のシノニム形 (類義語辞典検索) を検索できます。You can use CONTAINS, CONTAINSTABLE, FREETEXT, or FREETEXTTABLE to search for all the different tenses and conjugations of a verb or both the singular and plural forms of a noun (an inflectional search) or for synonymous forms of a specific word (a thesaurus search).

次の例は Comments データベースの ProductReview テーブルの AdventureWorks 列にある "foot" のすべての語形 ("foot"、"feet" など) を検索します。The following example searches for any form of "foot" ("foot," "feet," and so on) in the Comments column of the ProductReview table in the AdventureWorks database:

USE AdventureWorks2012  
GO  
  
SELECT Comments, ReviewerName  
FROM Production.ProductReview  
WHERE CONTAINS (Comments, 'FORMSOF(INFLECTIONAL, "foot")')  
GO  

フルテキスト検索では、動詞のさまざまな時制および活用または名詞の単数形と複数形の検索を可能にするステマーが使用されます。Full-text search uses stemmers, which allow you to search for the different tenses and conjugations of a verb, or both the singular and plural forms of a noun. ステマーの詳細については、「 検索用のワード ブレーカーとステミング機能の構成と管理」を参照してください。For more information about stemmers, see Configure and Manage Word Breakers and Stemmers for Search.

生成語検索に関する詳細情報More info about generation term searches

変化形は、動詞のさまざまな時制および活用、または名詞の単数形と複数形です。The inflectional forms are the different tenses and conjugations of a verb or the singular and plural forms of a noun.

たとえば、"drive" という語の変化形を検索します。For example, search for the inflectional form of the word "drive." テーブルのさまざまな行に、"drive"、"drives"、"drove"、"driving"、および "driven" が含まれている場合、これらはどれも drive という語から変化して生成されているので結果セットに入ります。If various rows in the table include the words "drive," "drives," "drove," "driving," and "driven," all would be in the result set because each of these can be inflectionally generated from the word drive.

FREETEXT および FREETEXTTABLE は、指定されたすべての語の変化形の語句を既定で検索します。FREETEXT and FREETEXTTABLE look for inflectional terms of all specified words by default. CONTAINS および CONTAINSTABLE は、省略可能な INFLECTIONAL 引数をサポートしています。CONTAINS and CONTAINSTABLE support an optional INFLECTIONAL argument.

特定の語のシノニムの検索Search for synonyms of a specific word

類義語辞典は、ユーザー指定の用語のシノニムを定義します。A thesaurus defines user-specified synonyms for terms. 類義語辞典ファイルの詳細については、「フルテキスト検索に使用する類義語辞典ファイルの構成と管理」を参照してください。For more info about thesaurus files, see Configure and Manage Thesaurus Files for Full-Text Search.

たとえば、エントリ "{car, automobile, truck, van}" が類義語辞典に追加されると、"car" という語の類義語形式を検索できます。For example, if an entry, "{car, automobile, truck, van}," is added to a thesaurus, you can search for the thesaurus form of the word "car." "automobile"、"truck"、"van"、または "car" という語は、"car" という語を含むシノニムの拡張セットに属しているため、クエリ処理されるテーブルの行のうち、これらのいずれかの語を含むすべての行が結果セットに表示されます。All rows in the table queried that include the words "automobile," "truck," "van," or "car," appear in the result set because each of these words belongs to the synonym expansion set containing the word "car."

FREETEXTFREETEXTTABLE は、類義語辞典を既定で使用します。FREETEXT and FREETEXTTABLE use the thesaurus by default. CONTAINS および CONTAINSTABLE は、省略可能な THESAURUS 引数をサポートしています。CONTAINS and CONTAINSTABLE support an optional THESAURUS argument.

近接する語の検索Search for a word NEAR another word

"近接語句" は、相互に近い語句を示します。A proximity term indicates words or phrases that are near to each other. 最初の検索語句と最後の検索語句を分離する非検索用語の最大数を指定することもできます。You can also specify the maximum number of non-search terms that separate the first and last search terms. さらに、任意の順序で語や句を検索したり、指定した順序で語や句を検索したりすることができます。In addition, you can search for words or phrases in any order, or in the order in which you specify them.

たとえば、"ice" という語の近くに "hockey" という語がある行や、"ice skating" という句の近くに "ice hockey" という句がある行を検索できます。For example, you want to find the rows in which the word "ice" is near the word "hockey" or in which the phrase "ice skating" is near the phrase "ice hockey."

CONTAINS および CONTAINSTABLECONTAINS and CONTAINSTABLE

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

重み付け値を使用する語または句 (重み付け語句) の検索Search for words or phrases using weighted values (Weighted Term)

CONTAINSTABLE を使用すると、重み付け値を指定して語または句を検索することができます。You can use CONTAINSTABLE to search for words or phrases and specify a weighting value. 重みは 0.0 ~ 1.0 の数値で指定し、一連の語句内における各語句の重要度を示します。Weight, measured as a number from 0.0 through 1.0, indicates the importance of each word and phrase within a set of words and phrases. 重み 0.0 は最低値であり、重み 1.0 は最高値です。A weight of 0.0 is the lowest, and a weight of 1.0 is the highest.

次の例のクエリは、重みを使用して、文字列 "Bay" で始まるテキストに "Street" または "View" が含まれる顧客住所をすべて検索します。The following example shows a query that searches for all customer addresses, using weights, in which any text beginning with the string "Bay" has either "Street" or "View." 結果では、指定した語が多く含まれている行ほど高い順位が付けられます。The results give a higher rank to those rows that contain more of the words specified.

USE AdventureWorks2012  
GO  
  
SELECT AddressLine1, KEY_TBL.RANK   
FROM Person.Address AS Address INNER JOIN  
CONTAINSTABLE(Person.Address, AddressLine1, 'ISABOUT ("Bay*",   
         Street WEIGHT(0.9),   
         View WEIGHT(0.1)  
         ) ' ) AS KEY_TBL  
ON Address.AddressID = KEY_TBL.[KEY]  
ORDER BY KEY_TBL.RANK DESC  
GO  

重み付け語句は、単純語句、プレフィックス語句、生成語、または近接語句と組み合わせて使用できます。A weighted term can be used in conjunction with any simple term, prefix term, generation term, or proximity term.

重み付け語句検索に関する詳細情報More info about weighted term searches

重み付け語句検索において、重み付け値は、一連の語句内における各語句の重要度を示します。In a weighted term search, a weighting value indicates the degree of importance for each word and phrase within a set of words and phrases. 重み付け値 0.0 は最低値であり、重み付け値 1.0 は最高値です。A weight value of 0.0 is the lowest, and a weight value of 1.0 is the highest.

たとえば、複数の語句を検索するクエリでは、検索条件の各検索語に、他の語との相対的な重要性を示す重み付け値を割り当てることができます。For example, in a query searching for multiple terms, you can assign each search word a weight value indicating its importance relative to the other words in the search condition. この種のクエリ結果では、検索語に割り当てた相対的な重みに従って、最も関連性の高い行が最初に返されます。The results for this type of query return the most relevant rows first, according to the relative weight you have assigned to search words. 結果セットには、指定した語句 (またはそれらの間のコンテンツ) のいずれかを含むドキュメントまたは行が含まれます。ただし、各検索語句に関連付けられている重み付け値の違いにより、一部の結果が他の結果より関連性が高いと見なされます。The result sets contain documents or rows containing any of the specified terms (or content between them); however, some results will be considered more relevant than others because of the variation in the weighted values associated with different searched terms.

重み付け語句検索は CONTAINSTABLE でサポートされます。Weighted term searches are supported by CONTAINSTABLE.

AND、OR、および NOT (ブール演算子) の使用Use AND, OR, and NOT (Boolean operators)

CONTAINS 述語と CONTAINSTABLE 関数は、同じ検索条件を使用します。The CONTAINS predicate and CONTAINSTABLE function use the same search conditions. どちらも、ブール演算子 AND、OR、AND NOT を使用して複数の検索語句を結合した論理演算をサポートします。Both support combining several search terms by using Boolean operators - AND, OR, and NOT - to perform logical operations. たとえば、AND を使用して "latte" と "New York-style bagel" の両方を含む行を検索できます。You can use AND, for example, to find rows that contain both "latte" and "New York-style bagel." また、AND NOT を使用して "bagel" を含み、かつ "cream cheese" を含まない行を検索することもできます。You can use AND NOT, for example, to find the rows that contain "bagel" but do not contain "cream cheese."

一方、FREETEXT と FREETEXTTABLE では、ブール演算子は検索対象の語として扱われます。In contrast, FREETEXT and FREETEXTTABLE treat the Boolean terms as words to be searched.

CONTAINS を、論理演算子 AND、OR、および NOT を使用する他の述語と組み合わせる方法については、「検索条件 (Transact-SQL)」を参照してください。For information about combining CONTAINS with other predicates that use the logical operators AND, OR, and NOT, see Search Condition (Transact-SQL).

Example

次の例では、CONTAINS 述語を使用して、説明 ID が 5 以外で、説明に "Aluminum" と "spindle" という両方の単語が含まれている説明を検索します。The following example 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. この例では、AdventureWorks2012AdventureWorks2012 データベースの ProductDescription テーブルを使用します。This example uses the ProductDescription table of the AdventureWorks2012AdventureWorks2012 database.

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

大文字と小文字、ストップ ワード、言語、および類義語辞典Case, stopwords, language, and thesaurus

フルテキスト クエリを記述する場合は、次のオプションも指定できます。When you write full-text queries, you can also specify the following options:

  • 大文字と小文字の区別」を参照してください。Case sensitivity. フルテキスト検索クエリでは大文字と小文字は区別されません。Full-text search queries are case-insensitive. ただし、日本語の場合は、同じ発音を複数の方法で表記できます。この表記方法を正規化することは、大文字と小文字の区別をなくすことに似ています。たとえば、「かな」で検索することで、大文字小文字を区別しない検索に近い検索を実現できます。However, in Japanese, there are multiple phonetic orthographies in which the concept of orthographic normalization is akin to case insensitivity (for example, kana = insensitivity). しかし、このような正規化はサポートされていません。This type of orthographic normalization is not supported.

  • ストップワード」を参照してください。Stopwords. フルテキスト クエリを定義する際に、Full-Text Engine でストップワード (ノイズ ワードとも呼ばれます) が検索基準から除外されます。When defining a full-text query, the Full-Text Engine discards stopwords (also called noise words) from the search criteria. ストップワードとは、"a"、"and"、"is"、"the" などの頻出する単語で、特定のテキストの検索には通常役立ちません。Stopwords are words such as "a," "and," "is," or "the," that can occur frequently but that typically do not help when searching for particular text. ストップワードはストップリストに列挙されています。Stopwords are listed in a stoplist. 各フルテキスト インデックスには特定のストップリストが関連付けられ、それによってクエリから、またはインデックス作成時にインデックスから除外されるストップワードが決まります。Each full-text index is associated with a specific stoplist, which determines what stopwords are omitted from the query or the index at indexing time. 詳細については、「フルテキスト検索に使用するストップワードとストップリストの構成と管理」を参照してください。For more info, see Configure and Manage Stopwords and Stoplists for Full-Text Search.

  • LANGUAGE オプションを使用した LanguageLanguage, with the LANGUAGE option. クエリ用語の多くは、ワード ブレーカーの動作に大きく依存します。Many query terms depend heavily on word-breaker behavior. 適切なワード ブレーカー (およびステミング機能) および類義語辞典ファイルを使用するために、LANGUAGE オプションを指定することをお勧めします。To ensure that you are using the correct word breaker (and stemmer) and thesaurus file, we recommend that you specify the LANGUAGE option. 詳細については、「 フルテキスト インデックス作成時の言語の選択」を参照してください。For more information, see Choose a Language When Creating a Full-Text Index.

  • 類義語辞典Thesaurus. FREETEXT クエリと FREETEXTTABLE クエリでは、類義語辞典を既定で使用します。FREETEXT and FREETEXTTABLE queries use the thesaurus by default. CONTAINS と CONTAINSTABLE では、省略可能な THESAURUS 引数をサポートしています。CONTAINS and CONTAINSTABLE support an optional THESAURUS argument. 詳細については、「フルテキスト検索に使用する類義語辞典ファイルの構成と管理」を参照してください。For more info, see Configure and Manage Thesaurus Files for Full-Text Search.

トークン化の結果の確認Check the tokenization results

特定のワード ブレーカー、類義語辞典、ストップリストの組み合わせをクエリに適用した後に、sys.dm_fts_parser 動的管理ビューを使用すると、フルテキスト検索によって結果がどのようにトークン化されるかを確認できます。After you apply a given word breaker, thesaurus, and stoplist combination in a query, you can see how Full-Text Search tokenizes the results by using the sys.dm_fts_parser dynamic management view. 詳細については、「sys.dm_fts_parser (Transact-SQL)」を参照してください。For more information, see sys.dm_fts_parser (Transact-SQL).

参照See Also

CONTAINS (Transact-SQL) CONTAINS (Transact-SQL)
CONTAINSTABLE (Transact-SQL) CONTAINSTABLE (Transact-SQL)
FREETEXT (Transact-SQL) FREETEXT (Transact-SQL)
FREETEXTTABLE (Transact-SQL) FREETEXTTABLE (Transact-SQL)
フルテキスト検索クエリの作成 (Visual Database Tools) Create Full-Text Search Queries (Visual Database Tools)
フルテキスト クエリのパフォーマンスの向上Improve the Performance of Full-Text Queries