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
.
Примечание. |
---|
Для запуска этого примера необходимо установить базу данных 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
Следующий пример аналогичен рассмотренному ранее и демонстрирует использование параметров LANGUAGE
language_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 . |
Журнал изменений
Версия | Журнал |
---|---|
17 июля 2006 г. |
|
См. также
Справочник
CONTAINS (Transact-SQL)
Функция CONTAINSTABLE (Transact-SQL)
FREETEXT (Transact-SQL)
Функции наборов строк (Transact-SQL)
SELECT (Transact-SQL)
Предложение WHERE (Transact-SQL)
Другие ресурсы
Запросы к SQL Server с использованием компонента Full-Text Search
Параметр precompute rank