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


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)

CONTAINS (Transact-SQL)

CONTAINSTABLE (Transact-SQL)

FREETEXT (Transact-SQL)

Функции наборов строк (Transact-SQL)

SELECT (Transact-SQL)

Предложение WHERE (Transact-SQL)

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

Приступая к работе с компонентом Full-Text Search

Создание и управление полнотекстовыми каталогами

Создание и управление полнотекстовыми индексами

Запрос с полнотекстовым поиском

Параметр конфигурации сервера «precompute rank»