В отличие от предиката LIKE, который работает только с комбинациями символов, полнотекстовые запросы выполняют лингвистический поиск данных, обрабатывая слова и фразы согласно правилам конкретного языка. Применяя предикаты CONTAINS и FREETEXT, а также функции CONTAINSTABLE и FREETEXTTABLE, можно писать запросы, возвращающие следующие результаты:
♦ грамматические формы заданного глагола;
♦ синонимы искомого термина, найденные с помощью поиска в тезаурусе;
♦ результаты совпадения данных, хранящихся, например, в столбце типаnvarchar(max).
Предикат CONTAINS позволяет писать запросы, возвращающие точные совпадения с входными данными и нечеткие (менее точные) (fuzzy) совпадения с входным элементом.
У функции CONTAINSTABLE те же условия поиска, что и у предиката, но она также позволяет возвращать в результирующем наборе степень соответствия (relevance value) (RANK) и полнотекстовый ключ (KEY) для каждой строки.
С помощью этих команд можно искать следующие элементы:
• слова или фразы;
• префикса слова или фразы;
• слова около другого слова;
• слова, флективно сформированного из другого (например, английское слово «drive» является флективной основой слов «drives», «drove», «driving» и «driven»);
• слова, которое является синонимом другого слова, с использованием тезауруса (например, английское слово «metal» может иметь синоним «aluminum» и «steel»).
У предиката CONTAINS два аргумента – Includedcolumn и Searchcondition.
1. Аргумент Includedcolumn может содержать любой из следующих компонентов:
• column_name – имя столбца, если хотите искать только в одном столбце;
• column_list – имена столбцов, если хотите искать в нескольких столбцах;
• (звездочка) – означает, что столбцы таблицы в предложении FROM, допускающие полнотекстовый поиск, должны быть включены в него;
• LANGUAGE – язык запроса может быть одним из идентификаторов lcid из таблицы syslanguages.
2. Аргумент Searchcondition может содержать следующие компоненты:
• simple_term (простое выражение) – слово или фраза (несколько слов с пробелами между ними в двойных кавычках);
• prefix_term (префиксное выражение) – слово или фраза в двойных кавычках, за последним словом должна следовать звѐздочка;
• generation_term(производное выражение) – задайте ключевое слово INFLECTIONAL (поиск форм глаголов или существительных)илиTHESAURUS (совпадение в тезаурусе слова или фразы) для определения зависящей от языка подстановки
• proximity_term(выражение с учетом расположения) – задавайте его с оператором близости NEAR, чтобы указать, что слово слева от должно быть расположено недалеко от элемента слева;
• weighted_term(взвешенное выражение) – задавайте его с ключевым словом ISABOUT. Кроме того, используется ключевое слово WEIGHT и число в диапазоне от 0.0 до 1.0 для указания относительного веса каждого компонента во взвешенном выражении. Имеет смысл использовать только совместно с функцией CONTAINSTABLE;
• логическиеоператоры– AND (или &), ANDNOT (или &!), OR (или !).
Функция CONTAINSTABLE использует такие же условия поиска, как и предикат CONTAINS, но есть следующие дополнительные аргументы:
1. table– имя таблицы, для которой включен полнотекстовый поиск;
2. top_n_by_rank – задает возврат только указанного числа строк с наибольшими рангами. Ограничив с помощью этого параметра результаты только значимыми строками, можно повысить производительность запроса.
Пример 3.1. Использовать предикат CONTAINS для поиска в таблице dbo.Книги базы данных BIBLIO аннотаций о книгах, содержащих фразу SQL Server.
В предикате CONTAINS первым параметром является имя столбца
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.