FREETEXTTABLE (Transact-SQL)
Функция, используемая в предложении FROM инструкции Transact-SQL SELECT для выполнения полнотекстового поиска SQL Server по столбцам c полнотекстовой индексацией, содержащим символьные типы данных. Эта функция возвращает таблицу из 0, одной или более строк, где столбцы содержат значения, совпадающие по смыслу, но не дословно с текстом, указанным в аргументе freetext_string. Ссылки на функцию FREETEXTTABLE указываются так, как если бы это было имя обычной таблицы.
Функция FREETEXTTABLE полезна для поиска совпадений того же типа, что и предикат FREETEXT (Transact-SQL).
Запросы, использующие функцию FREETEXTTABLE, возвращают ранжирующие по релевантности значения (RANK) и полнотекстовый ключ (KEY) для каждой строки.
Примечание |
---|
Сведения о формах и полнотекстовом поиске, поддерживаемых в SQL Server, см. в разделе Запрос с полнотекстовым поиском. |
Соглашения о синтаксисе Transact-SQL
Синтаксис
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), то MicrosoftSQL 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 может быть задействована только пользователями с соответствующими правами доступа SELECT на указанную таблицу или ее ссылаемые столбцы.
Примеры
А.Использование функции FREETEXT в INNER JOIN
В следующем примере возвращается имя и описание всех категорий, связанных с sweet, candy, bread, dry или meat.
USE AdventureWorks2012
GO
SELECT FT_TBL.Description
,KEY_TBL.RANK
FROM Production.ProductDescription AS FT_TBL
INNER JOIN FREETEXTTABLE(Production.ProductDescription,
Description,
'high level of performance') AS KEY_TBL
ON FT_TBL.ProductDescriptionID = KEY_TBL.[KEY]
ORDER BY RANK DESC
GO
Б.Указание языка и соответствий с наивысшими ранжирующими значениями
Следующий пример аналогичен рассмотренному ранее и демонстрирует использование параметров LANGUAGE language_term и top_n_by_rank .
USE AdventureWorks2012
GO
SELECT FT_TBL.Description
,KEY_TBL.RANK
FROM Production.ProductDescription AS FT_TBL
INNER JOIN FREETEXTTABLE(Production.ProductDescription,
Description,
'high level of performance',
LANGUAGE N'English', 2) AS KEY_TBL
ON FT_TBL.ProductDescriptionID = KEY_TBL.[KEY]
ORDER BY RANK DESC
GO
Примечание |
---|
Параметр LANGUAGE language_term r не требуется для использования параметра top_n_by_rank . |
См. также
Задания
Создание запросов полнотекстового поиска (визуальные инструменты для баз данных)
Справочник
CREATE FULLTEXT CATALOG (Transact-SQL)
CREATE FULLTEXT INDEX (Transact-SQL)
Функции наборов строк (Transact-SQL)
Предложение WHERE (Transact-SQL)
Основные понятия
Приступая к работе с компонентом Full-Text Search
Создание и управление полнотекстовыми каталогами
Создание и управление полнотекстовыми индексами