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


FREETEXTTABLE (Transact-SQL)

Возвращает таблицу из 0, одной или более строк, в которой столбцы содержат символьные данные, совпадающие по смыслу, но не дословно, с текстом, указанным в аргументе freetext_string. Функция FREETEXTTABLE может использоваться только в предложении FROM инструкции SELECT как обычное имя таблицы.

Запросы, использующие функцию FREETEXTTABLE, задают полнотекстовые запросы типа freetext-type, которые возвращают значение ранжирования по релевантности (RANK) и полнотекстовый ключ (KEY) для каждой строки.

Значок ссылки на разделСинтаксические обозначения 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), то 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 .

См. также

Задания

Справочник

Основные понятия