FREETEXTTABLE (Transact-SQL)
Область применения: SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure
Функция, используемая в предложении FROM инструкции Transact-SQL SELECT для выполнения полнотекстового поиска SQL Server на полнотекстовых индексированных столбцах, содержащих типы данных на основе символов. Эта функция возвращает таблицу с нулем, одной или несколькими строками для этих столбцов, содержащих значения, которые соответствуют значению, а не только точному слову текста в указанном 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
Имя таблицы, помеченной как допускающая полнотекстовые запросы. таблица или представлениемогут быть одним, двумя или трехкомпонентными именами объектов базы данных. При выполнении запроса к представлению задействуется только базовая таблица с полнотекстовым индексированием.
таблица не может указывать имя сервера и не может использоваться в запросах к связанным серверам.
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, где И является ключевым словом, при использовании в freetext_string слово "и" считается шумным словом, или стоп-словом, и будет отменено.
Использование функций WEIGHT, FORMSOF, символов шаблонов, NEAR, а также других синтаксических элементов запрещено. freetext_string разбивается на слова, проходит процедуру вычленения корней и пропускается через тезаурус.
LANGUAGE language_term
Язык, ресурсы которого будут использованы для разбиения по словам, выделения корня, проверки по тезаурусу и удаления стоп-слов в составе запроса. Этот аргумент не является обязательным и может быть строкой, целым числом или шестнадцатеричным значением, соответствующим идентификатору локали (LCID). Если аргумент language_term задан, то соответствующий язык будет применяться ко всем элементам условия поиска. Если значение не указано, то используется язык полнотекстового поиска, заданный для столбца.
Если в одном столбце хранятся документы на различных языках в виде больших двоичных объектов, то идентификатор локали заданного документа определяет, какой язык должен использоваться для индексирования его содержимого. Указание аргумента LANGUAGE language_term при запросе к такому столбцу может повысить вероятность хорошего соответствия.
Если аргумент language_term является строкой, он соответствует значению столбца alias в представлении совместимости sys.languages (Transact-SQ). Строка должна быть заключена в одиночные кавычки: '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 может быть задействована только пользователями с соответствующими правами доступа SELECT на указанную таблицу или ее ссылаемые столбцы.
Примеры
А. Простой пример
В следующем примере создается простая таблица двух столбцов, в которой перечислены 3 округа и цвета флагов. Он создает и заполняет полнотекстовый каталог и индекс в таблице. Затем демонстрируется синтаксис FREETEXTTABLE.
CREATE TABLE Flags (Country nvarchar(30) NOT NULL, FlagColors varchar(200));
CREATE UNIQUE CLUSTERED INDEX FlagKey ON Flags(Country);
INSERT Flags VALUES ('France', 'Blue and White and Red');
INSERT Flags VALUES ('Italy', 'Green and White and Red');
INSERT Flags VALUES ('Tanzania', 'Green and Yellow and Black and Yellow and Blue');
SELECT * FROM Flags;
GO
CREATE FULLTEXT CATALOG TestFTCat;
CREATE FULLTEXT INDEX ON Flags(FlagColors) KEY INDEX FlagKey ON TestFTCat;
GO
SELECT * FROM Flags;
SELECT * FROM FREETEXTTABLE (Flags, FlagColors, 'Blue');
SELECT * FROM FREETEXTTABLE (Flags, FlagColors, 'Yellow');
B. Использование функции FREETEXT в INNER JOIN
В следующем примере возвращается описание и ранг всех продуктов с описанием, соответствующим значению high level of performance
.
USE AdventureWorks2022;
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
C. Указание языка и соответствий с наивысшими ранжирующими значениями
Следующий пример идентичен и показывает использование LANGUAGE
параметров language_term и top_n_by_rank .
USE AdventureWorks2022;
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 не требуется использовать параметр top_n_by_rank .
См. также
Начало работы с компонентом Full-Text Search
Создание и управление полнотекстовыми каталогами
CREATE FULLTEXT CATALOG (Transact-SQL)
CREATE FULLTEXT INDEX (Transact-SQL)
Создание и управление полнотекстовыми индексами
Запросы с полнотекстовым поиском
Создание запросов полнотекстового поиска (визуальные инструменты для баз данных)
CONTAINS (Transact-SQL)
CONTAINSTABLE (Transact-SQL)
FREETEXT (Transact-SQL)
Функции набора строк (Transact-SQL)
SELECT (Transact-SQL)
WHERE (Transact-SQL)
Параметр конфигурации сервера «precompute rank»
Сравнение функций в База данных SQL Azure и Управляемый экземпляр SQL Azure