Запрос с полнотекстовым поискомQuery with Full-Text Search

Применимо к:Applies to: даSQL ServerSQL Server (все поддерживаемые версии) yesSQL ServerSQL Server (all supported versions) ДаБаза данных SQL AzureAzure SQL DatabaseYesБаза данных SQL AzureAzure SQL DatabaseПрименимо к:Applies to: даSQL ServerSQL Server (все поддерживаемые версии) yesSQL ServerSQL Server (all supported versions) ДаБаза данных SQL AzureAzure SQL DatabaseYesБаза данных SQL AzureAzure SQL Database

Пишите полнотекстовые запросы с помощью предикатов CONTAINS и FREETEXT и функций CONTAINSTABLE и FREETEXTTABLE, возвращающих наборы строк, с инструкцией SELECT.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.

  • Для сопоставления слов и фраз используйте функции CONTAINS и CONTAINSTABLE.To match words and phrases, use CONTAINS and CONTAINSTABLE.
  • Для поиска совпадений по смыслу, а не буквального совпадения, используйте функции FREETEXT и FREETEXTTABLE.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 для SQL Server 2016 CTP3.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. Дополнительные сведения см. в разделе Начало работы с полнотекстовым поиском.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 содержит слово "aluminum" рядом со словом "light" или "lightweight".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. Чтобы написать аналогичный запрос, необходимо знать, что столбец ProductDescriptionID является уникальным ключевым столбцом для таблицы ProductDescription.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/CONTAINSTABLE и FREETEXT/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

  • Поиск совпадений по смыслу, а не по буквальному совпадению задаваемых слов, фраз или предложений (текст в свободной форме).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 используются в предложении WHERE или HAVING инструкции SELECT.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. Предикаты можно объединить с любым из других предикатов Transact-SQLTransact-SQL, например LIKE и BETWEEN.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 для запроса по столбцам полнотекстового индекса целевых таблиц на связанном сервере.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 можно использовать в предложении FROM инструкции SELECT, как обычное имя таблицы.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. Эти функции возвращают пустую таблицу, либо таблицу с одной или несколькими строками, соответствующими полнотекстовому запросу.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)

Для поиска конкретного слова или фразы в таблице можно использовать запросы CONTAINS, CONTAINSTABLE, FREETEXT или FREETEXTTABLE.You can use CONTAINS, CONTAINSTABLE, FREETEXT, or FREETEXTTABLE to search a table for a specific word or phrase. Например, для поиска в таблице ProductReview базы данных AdventureWorks2012AdventureWorks2012 всех комментариев о продукции, содержащих фразу "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") может быть сложным и включать одно выражение или несколько.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.

Например, «круассан» — это слово, а «кофе с молоком» — фраза.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``ple, top``pingи top.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. Например, если запрос включает префиксное выражение "белый хлеб*", будут возвращены строки с текстом "белый хлебец", "белый хлебный" и "белый хлеб", но не "белый поджаренный хлеб".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.

  • Для единственного префиксного выражения частью результирующего набора будет любое слово, начинающееся с указанного выражения.For a single prefix term, any word starting with the specified term will be part of the result set. Например, для префиксного выражения "авто *" совпадениями будут "автоматический", "автомобиль" и т. д.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. Например, выражение "авто тран*" соответствует фразам "автоматическая трансмиссия" и "автомобильный транспорт", но не "автомобильный личный транспорт".For example, the term "auto tran*" matches "automatic transmission" and "automobile transducer," but it does not match "automatic motor transmission."

Поиск префиксов поддерживается CONTAINS и CONTAINSTABLE.Prefix searches are supported by CONTAINS and CONTAINSTABLE.

Поиск словоформ конкретного слова (производное выражение)Search for inflectional forms of a specific word (Generation Term)

С помощью функций CONTAINS, CONTAINSTABLE, FREETEXTили 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).

В следующем примере выполняется поиск любых форм слова "foot" ("foot", "feet" и т. д.) в столбце Comments таблицы ProductReview в базе данных AdventureWorks.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.

Примером такого поиска может служить поиск словоформ слова "водить".For example, search for the inflectional form of the word "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.

Например, если в тезаурусе есть запись "{машина, автомобиль, грузовик, фургон}", можно искать синонимическую форму слова "машина".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." В результирующий набор войдут все строки таблицы, содержащие слова "автомобиль", "грузовик", "фургон" или "машина", потому что каждое из этих слов входит в состав расширяющего набора синонимов, содержащего и слово "машина".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."

По умолчанию тезаурус используется в запросахFREETEXT и FREETEXTTABLE .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.

Примером может служить поиск строк, в которых слово "лед" находится рядом со словом "хоккей" или фраза "хоккей на льду" — рядом с фразой "катание на коньках".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.

В следующем примере показан запрос, выполняющий поиск (с использованием взвешенных значений) всех адресов заказчиков, в которых текст, начинающийся со строки "Залив", продолжается строкой "Улица" или "Вид".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)

Функция CONTAINSTABLE и предикат CONTAINS используют одинаковые условия поиска.The CONTAINS predicate and CONTAINSTABLE function use the same search conditions. Они поддерживают объединение нескольких искомых терминов (с помощью логических операторов AND, OR и NOT) для выполнения логических операций.Both support combining several search terms by using Boolean operators - AND, OR, and NOT - to perform logical operations. Например, оператор AND можно использовать для поиска строк, содержащих и "латте", и "пирожное с кремом".You can use AND, for example, to find rows that contain both "latte" and "New York-style bagel." Например, с помощью оператора AND NOT можно находить строки, которые содержат слово "бублик", но не содержат "мак".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 для поиска описаний, в которых идентификатор описания не равен 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. В следующем примере используется таблица ProductDescription базы данных AdventureWorks2012AdventureWorks2012.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. При определении полнотекстового запроса следует иметь в виду, что средство полнотекстового поиска не учитывает стоп-слова (также известные как пропускаемые слова), указанные в критерии поиска.When defining a full-text query, the Full-Text Engine discards stopwords (also called noise words) from the search criteria. Стоп-слова — это часто встречающиеся слова, которые не повышают эффективность поиска конкретного текста. Примерами могут служить слова «и», «или», «о» и «в».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.Language, 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)
Создание запросов полнотекстового поиска (визуальные инструменты для баз данных) Create Full-Text Search Queries (Visual Database Tools)
Повышение производительности полнотекстовых запросовImprove the Performance of Full-Text Queries