FREETEXTTABLE (Transact-SQL)

Изменения: 17 июля 2006 г.

Возвращает таблицу из 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 могут быть именем объекта базы данных, состоящим из одной, двух или трех частей. При выполнении запроса к представлению задействуется только базовая таблица с полнотекстовым индексированием.

    Дополнительные сведения см. в разделе Синтаксические обозначения в Transact-SQL (Transact-SQL).

    Аргумент table не может содержать имя сервера и не может быть использован в запросах к связанному серверу.

  • column_name
    Имя столбца для поиска, который хранится в объекте, определенном аргументом table. Столбцы типов char, varchar, nchar, nvarchar, text, ntext, image, xml и 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 разбивается на слова, затем вычленяются корни и проводится проверка по словарю. Если строка freetext_string заключена в двойные кавычки, производится поиск соответствия фразы; поиск корня и проверка по словарю не производится.

  • LANGUAGE language_term
    Язык, ресурсы которого будут использованы для разбиения на слова, поиска корня и проверки по словарю и удаления лишних слов в качестве части запроса FREETEXTTABLE. Этот параметр указывается по желанию и может быть указан как строка, целое число или шестнадцатеричное значение, соответствующее идентификатору территории (LCID) языка. Если аргумент language_term указан, язык, который он представляет, будет применен ко всем элементам условия поиска. Если не указано никакого значения, используется язык полнотекстового столбца.

    Если аргумент language_term задан в виде строки, то он соответствует значению столбца alias системной таблицы syslanguages. Строка должна быть заключена в одинарные кавычки, например 'language_term'. Будучи указанным как целое число, аргумент language_term является идентификатором регионального стандарта, определяющего язык. Если аргумент language_term указан в виде шестнадцатеричного числа (с префиксом 0x), то он задает код языка в шестнадцатеричном формате. Шестнадцатеричное значение не может иметь более восьми знаков, включая начальные нули.

    Если значение выражено в формате с двухбайтной кодировкой (DBCS), Microsoft SQL Server преобразует его в Юникод.

    Если указанный язык недопустим, или ресурсы, связанные с языком, не установлены, SQL Server возвращает ошибку. Для использования нейтральных языковых ресурсов укажите аргумент language_term со значением 0x0.

  • top_n_by_rank
    Если задано целое значение, n, то функция FREETEXTTABLE возвращает только n первых совпадений, отсортированных по рангу.

    Если дополнительно к предикату FREETEXTTABLE выполняется фильтрация, фильтр применяется к первым n строкам и будет возвращено менее чем top_n_by_rank строк. При включении параметра precompute rank в процедуре sp_configure хранимая процедура может увеличить производительность выполнения запросов FREETEXTTABLE, использующих аргумент top_n_by_rank. Дополнительные сведения см. в разделах Хранимая процедура sp_configure (Transact-SQL) и sp_fulltext_service (Transact-SQL).

Замечания

Функция FREETEXTTABLE использует те же условия поиска, что и предикат FREETEXT.

Подобно функции CONTAINSTABLE, возвращаемая таблица содержит столбцы с именами KEY и RANK, на которые ссылаются запросы для получения соответствующих строк и использования значения ранжирования строк.

FREETEXTTABLE не распознается как ключевое слово, если уровень совместимости меньше 70. Дополнительные сведения см. в разделе sp_dbcmptlevel (Transact-SQL).

Разрешения

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

Примеры

В следующем примере возвращается имя и описание всех категорий, связанных с sweet, candy, bread, dry или meat.

ms177652.note(ru-ru,SQL.90).gifПримечание.
Для запуска этого примера необходимо установить базу данных 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
ms177652.note(ru-ru,SQL.90).gifПримечание.
Параметр LANGUAGE language_term r не требуется для использования параметра top_n_by_rank .

Журнал изменений

Версия Журнал

17 июля 2006 г.

Новое содержимое
  • Добавлен пример для аргумента LANGUAGE.

См. также

Справочник

CONTAINS (Transact-SQL)
Функция CONTAINSTABLE (Transact-SQL)
FREETEXT (Transact-SQL)
Функции наборов строк (Transact-SQL)
SELECT (Transact-SQL)
Предложение WHERE (Transact-SQL)

Другие ресурсы

Запросы к SQL Server с использованием компонента Full-Text Search
Параметр precompute rank

Справка и поддержка

Получение помощи по SQL Server 2005