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

ОБЛАСТЬ ПРИМЕНЕНИЯ: даSQL Server даБаза данных SQL AzureнетХранилище данных SQL AzureнетParallel Data WarehouseAPPLIES TO: yesSQL Server yesAzure SQL Database noAzure SQL Data Warehouse 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 — предикат, используемый в предложении WHERE инструкции SELECT языка 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-SQLTopic 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. Столбцы должны иметь тип char, varchar, nchar, nvarchar, text, ntext, image, xml, varbinary или varbinary(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) до SQL Server 2017SQL Server 2017.Applies to: SQL Server 2012 (11.x)SQL Server 2012 (11.x) through SQL Server 2017SQL Server 2017.

Указывает свойство документа, по которому нужно выполнить поиск по заданному условию.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.

Если в одном столбце хранятся документы на различных языках в виде больших двоичных объектов, то код локали (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 при необходимости может быть указан в виде строки, целого числа или шестнадцатеричного значения, соответствующего коду языка.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 указан как строка, он соответствует значению столбца alias в представлении совместимости sys.languages (Transact-SQ).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 является целое число, оно представляет собой действительный код языка.When specified as an integer, language_term is the actual LCID that identifies the language. Если значение language_term задано в шестнадцатеричной форме, то после символов "0x" должна следовать шестнадцатеричная запись кода языка.When specified as a hexadecimal value, language_term is 0x followed by the hexadecimal value of the LCID. Шестнадцатеричное значение не может иметь более восьми знаков, включая начальные нули.The hexadecimal value must not exceed eight digits, including leading zeros.

Если значение указано в формате двухбайтовой кодировки (DBCS), SQL ServerSQL Server преобразует его в Юникод.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. Для использования нейтральных языковых ресурсов следует указать 0x0 в качестве значения аргумента language_term.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> имеет тип 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. В данном примере следует объявить переменную @SearchWord с типом nvarchar(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
Одно или несколько слов с пробелами между ними.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. Примерами допустимых простых выражений являются "база данных", данные и "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. Если при поиске по одному слову используется слово из числа пропускаемых, 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 хранит стандартный список пропускаемых слов в каталоге \Mssql\Binn\FTERef каждого экземпляра SQL ServerSQL Server.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*"'). Звездочка заменяет ноль, один или более символов (корневого слова или слов в слове или фразе).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.

Заданный <simple_term> в <generation_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. Должно быть указано два поисковых выражения.You must specify two search terms. Это условие поиска может быть либо одним словом, либо фразой, заключенной в двойные кавычки ("phrase").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 возвращает для каждого документа ранг, основанный на схожести слов «лиса» и «курица».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) до SQL Server 2017SQL Server 2017.Applies to: SQL Server 2012 (11.x)SQL Server 2012 (11.x) through SQL Server 2017SQL Server 2017.

Указывает совпадение слов или фраз и (необязательно) максимально допустимое расстояние между поисковыми выражениями.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>).

Это условие поиска может быть либо одним словом, либо фразой, заключенной в двойные кавычки ("phrase").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. Необходимо указать не менее двух поисковых выражений.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.

Например, следующий запрос ищет AA и BB в любом порядке с максимальным расстоянием в пять выражений.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. В следующем примере запрос содержит три поисковых выражения — AA, BB и CC с максимальным расстоянием в пять слов: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)')  

Этот запрос найдет следующую строку, в которой общее расстояние составляет пять слов: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 ... B, и B ... 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, но влияет на ранг в запросах 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 | | }
Задает логическую операцию между двумя условиями поиска на вхождение.Specifies a logical operation between two contains search conditions.

{ AND | & }{ AND | & }
Указывает на то, что для совпадения оба условия поиска на вхождение должны быть удовлетворены.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 | &! }}
Указывает на то, что для совпадения второе условие поиска на вхождение не должно быть удовлетворено.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 | | }
Указывает на то, что для совпадения любое из условий поиска на вхождение должно быть удовлетворено.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. После вычисления групп, заключенных в скобки, эти правила применяются при использовании следующих логических операторов с условиями поиска на вхождение.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, как в AND NOT.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.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.

Полнотекстовые предикаты не допускаются в предложении OUTPUT, если уровень совместимости базы данных установлен в значение 100.Full-text predicates are not allowed in the OUTPUT clause when the database compatibility level is set to 100.

Запрос к удаленному серверуQuerying Remote Servers

Четырехкомпонентное имя может использоваться в предикате CONTAINS или FREETEXT для запроса по столбцам полнотекстового индекса целевых таблиц на связанном сервере.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. Еще одно соображение состоит в том, что 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. Использование 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. Использование CONTAINS с <prefix_term>Using CONTAINS with <prefix_term>

Следующий пример возвращает все имена товаров, содержащие по крайней мере одно слово, начинающееся с префикса «chain» в столбце Name.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. Использование 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. Использование CONTAINS с <proximity_term>Using CONTAINS with <proximity_term>

Применимо к: с SQL Server 2012 (11.x)SQL Server 2012 (11.x) до SQL Server 2017SQL Server 2017.Applies to: SQL Server 2012 (11.x)SQL Server 2012 (11.x) through SQL Server 2017SQL Server 2017.

В следующем примере производится поиск в таблице Production.ProductReview всех комментариев, содержащих слово bike, на расстоянии до 10 выражений от слова 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. Использование 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. Использование CONTAINS с <weighted_term>Using CONTAINS with <weighted_term>

В следующем примере выполняется поиск всех названий продуктов, содержащих слова performance, comfortable или 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. Использование 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. Использование CONTAINS с логическим оператором (AND)Using CONTAINS with a logical operator (AND)

В следующем примере используется таблица ProductDescription базы данных AdventureWorks2012AdventureWorks2012 .The following example uses the ProductDescription table of the AdventureWorks2012AdventureWorks2012 database. Запрос использует предикат CONTAINS для поиска описаний, в которых идентификатор описания не равен 5, а описание содержит слова Aluminum и spindle.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. Использование CONTAINS для проверки вставки строкиUsing CONTAINS to verify a row insertion

В следующем примере предикат CONTAINS используется во вложенном запросе SELECT.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. Запрос по свойству документаQuerying on a document property

Применимо к: с SQL Server 2012 (11.x)SQL Server 2012 (11.x) до SQL Server 2017SQL Server 2017.Applies to: SQL Server 2012 (11.x)SQL Server 2012 (11.x) through SQL Server 2017SQL Server 2017.

Следующий запрос выполняет поиск по индексированному свойству 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

Приступая к работе с компонентом Full-Text Search 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 Full-Text Search
Создание запросов полнотекстового поиска (визуальные инструменты для баз данных) Create Full-Text Search Queries (Visual Database Tools)
WHERE (Transact-SQL) WHERE (Transact-SQL)
Поиск свойств документа с помощью списков свойств поискаSearch Document Properties with Search Property Lists