Поделиться через


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  

В. Указание языка и соответствий с наивысшими ранжирующими значениями

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