FREETEXTTABLE (Transact-SQL)
Возвращает таблицу из 0, одной или более строк, в которой столбцы содержат символьные данные, совпадающие по смыслу, но не дословно, с текстом, указанным в аргументе freetext_string. Функция FREETEXTTABLE может использоваться только в предложении FROM инструкции SELECT как обычное имя таблицы.
Запросы, использующие функцию FREETEXTTABLE, задают полнотекстовые запросы типа freetext-type, которые возвращают значение ранжирования по релевантности (RANK) и полнотекстовый ключ (KEY) для каждой строки.
Синтаксис
FREETEXTTABLE (table , { column_name | (column_list) | * }
, 'freetext_string'
[ , LANGUAGE language_term ]
[ , top_n_by_rank ] )
Аргументы
table
Имя таблицы, которая была помечена для выполнения полнотекстовых запросов. Аргументы table или view могут быть именем объекта базы данных, состоящим из одной, двух или трех частей. При выполнении запроса к представлению задействуется только базовая таблица с полнотекстовым индексированием.Аргумент table не может содержать имя сервера и не может быть использован в запросах к связанному серверу.
column_name
Имя одного или нескольких столбцов с полнотекстовым индексом в таблице, указанной в предложении FROM. Столбцы могут иметь тип char, varchar, nchar, nvarchar, text, ntext, image, xml, varbinary или varbinary(max).column_list
Позволяет указать несколько столбцов, разделенных запятыми. Аргумент column_list необходимо заключать в круглые скобки. Если задан аргумент language_term, то у всех столбцов в списке column_list должен быть одинаковый язык.*
Указывает, что все столбцы, которые были зарегистрированы для полнотекстового поиска, должны быть использованы для поиска строки, заданной аргументом freetext_string. Если аргумент language_term не определен, язык всех столбцов в полнотекстовом индексе таблицы должен быть одинаковым.freetext_string
Искомый текст в столбце, определенном аргументом column_name. Допустимо вводить любой текст, включая слова, фразы или предложения. Соответствия формируются, если любой ключ или его формы найдены в полнотекстовом индексе.В отличие от условия поиска CONTAINS, где слово AND является ключевым, при использовании в параметре freetext_string слово «and» считается пропускаемым (или стоп-словом) и не обрабатывается.
Использование ключевых слов WEIGHT, FORMSOF, групповых символов, NEAR и прочего синтаксиса запрещено. Аргумент freetext_string разбивается на слова, затем вычленяются корни и проводится проверка по словарю.
LANGUAGE language_term
Язык, ресурсы которого будут использованы для разбиения по словам, выделения корня, проверки по тезаурусу и удаления стоп-слов в составе запроса. Этот аргумент не является обязательным и может быть строкой, целым числом или шестнадцатеричным значением, соответствующим идентификатору локали (LCID). Если аргумент language_term задан, то соответствующий язык будет применяться ко всем элементам условия поиска. Если не указано никакое значение, используется язык полнотекстового поиска, заданный для столбца.Если в одном столбце хранятся документы на различных языках в виде больших двоичных объектов, то идентификатор локали заданного документа определяет, какой язык должен использоваться для индексирования его содержимого. Указание параметра LANGUAGElanguage_term при запросе к такому столбцу может повысить вероятность хорошего соответствия.
Если аргумент language_term задан как строка, то он соответствует значению столбца alias в представлении совместимости sys.syslanguages (Transact-SQL). Строка должна быть заключена в одиночные кавычки: 'language_term'. Если значением аргумента language_term является целое число, оно представляет собой действительный код языка. Если значение language_term задано в шестнадцатеричной форме, то после символов «0x» должна следовать шестнадцатеричная запись кода языка. Шестнадцатеричное значение не может иметь более восьми знаков, включая ведущие нули.
Если значение указано в формате двухбайтовой кодировки (DBCS), то Microsoft SQL Server преобразует его в формат Юникод.
Если указанный язык является недопустимым или связанные с ним ресурсы не установлены, то SQL Server возвращает сообщение об ошибке. Для использования нейтральных языковых ресурсов следует указать 0x0 в качестве значения аргумента language_term.
top_n_by_rank
Позволяет ограничить результирующий набор до nпервых, упорядоченных по убыванию ранжированных строк, соответствующих условию поиска. Применяется в том случае, если n является целым числом. Если аргумент top_n_by_rank используется в сочетании с другими параметрами, то запрос может вернуть строк меньше общего числа строк, фактически соответствующих всем предикатам. Аргумент top_n_by_rank позволяет повысить производительность запроса, выбирая только те попадания, которые наиболее точно соответствуют запросу.
Замечания
Полнотекстовые предикаты и функции работают в одной таблице, что следует из наличия предиката FROM. Для поиска в нескольких таблицах используйте в предложении FROM соединенную таблицу, чтобы выполнять поиск в результирующем наборе, который получен в результате соединения нескольких таблиц.
Функция FREETEXTTABLE использует те же условия поиска, что и предикат FREETEXT.
Подобно функции CONTAINSTABLE, возвращаемая таблица содержит столбцы с именами KEY и RANK, на которые ссылаются запросы для получения соответствующих строк и использования значения ранжирования строк.
FREETEXTTABLE не распознается как ключевое слово, если уровень совместимости меньше 70. Дополнительные сведения см. в разделе sp_dbcmptlevel (Transact-SQL).
Разрешения
Функция FREETEXTTABLE может быть задействована только пользователями с соответствующими правами доступа SELECT на указанную таблицу или ее ссылаемые столбцы.
Примеры
В следующем примере возвращается имя и описание всех категорий, связанных с sweet, candy, bread, dry или meat.
Примечание |
---|
Для запуска этого примера необходимо установить базу данных Northwind. Сведения о том, как установить базу данных Northwind, см. в разделе Загрузка образцов баз данных Northwind и pubs. |
USE Northwind;
SELECT FT_TBL.CategoryName
,FT_TBL.Description
,KEY_TBL.RANK
FROM dbo.Categories AS FT_TBL
INNER JOIN FREETEXTTABLE(dbo.Categories, Description,
'sweetest candy bread and dry meat') AS KEY_TBL
ON FT_TBL.CategoryID = KEY_TBL.[KEY];
GO
Следующий пример аналогичен рассмотренному ранее и демонстрирует использование параметров LANGUAGElanguage_term и top_n_by_rank .
USE Northwind;
SELECT FT_TBL.CategoryName
,FT_TBL.Description
,KEY_TBL.RANK
FROM dbo.Categories AS FT_TBL
INNER JOIN FREETEXTTABLE(dbo.Categories, Description,
'sweetest candy bread and dry meat',LANGUAGE 'English',2)
AS KEY_TBL
ON FT_TBL.CategoryID = KEY_TBL.[KEY];
GO
Примечание |
---|
Параметр LANGUAGE language_term r не требуется для использования параметра top_n_by_rank . |
См. также