Запросы полнотекстового поиска
Для написания полнотекстовых запросов в Microsoft SQL Server 2005 необходимо уметь использовать предикаты языка Transact-SQL CONTAINS и FREETEXT, а также функции CONTAINSTABLE и FREETEXTTABLE, возвращающие наборы строк.
Предикаты CONTAINS и FREETEXT можно применять только в предложении WHERE инструкции SELECT. Функции CONTAINSTABLE и FREETEXTTABLE можно использовать в предложении FROM инструкции SELECT.
Предикат CONTAINS поддерживает расширенный синтаксис для поиска следующих элементов в столбцах текстовых данных:
- Одно или несколько конкретных слов или фраз (простые термы).
При полнотекстовом поиске слово считается лексемой. Лексема выделяется соответствующими средствами разбиения по словам на основе лингвистических правил выбранного языка. Допустимая фраза может состоять из нескольких слов со знаками препинания между ними или без них. Например, «круассан» — это слово, а «кофе с молоком» — фраза. Такие слова и фразы называются простыми термами. - Флективные формы конкретного слова (производные термы).
Примером такого поиска может служить поиск флективных форм слова «водить». Если разные строки таблицы содержат слова «водить», «водит», «водят», «водил» и «водите», все они войдут в результирующий набор, потому что каждое из этих слов можно флективно образовать от слова «водить». - Синонимические формы конкретного слова (тезаурус).
Например, если в тезаурусе есть запись «{машина, автомобиль, грузовик, фургон}», можно искать синонимическую форму слова «машина». В результирующий набор войдут все строки таблицы, содержащие слова «автомобиль», «грузовик», «фургон» или «машина», потому что каждое из этих слов входит в состав расширяющего набора синонимов, содержащего и слово «машина». Дополнительные сведения о структуре файлов тезауруса см. в разделе Настройка файлов тезауруса. - Слова, начинающиеся на заданный текст, или фразы с такими словами (префиксные термы).
При использовании фраз каждое слово фразы считается префиксом. Например, терм «авто тран*» соответствует фразам «автоматическая трансмиссия» и «автомобильный транспорт», но не «автомобильный личный транспорт». - Слова или фразы со взвешенными значениями (взвешенные термы).
Например, в запросе для поиска нескольких термов можно задать вес для каждого искомого слова, обозначающий его значимость по сравнению с другими словами в условии поиска. Результат выполнения такого типа запроса будет в начале содержать наиболее релевантные строки, исходя из соответствующего веса, присвоенного искомым словам. - Слова или фразы, находящиеся рядом с другими словами или фразами (близкие термы).
Примером может служить поиск строк, в которых слово «лед» находится рядом со словом «хоккей» или фраза «хоккей на льду» — рядом с фразой «катание на коньках».
В предикатах CONTAINS можно объединять несколько этих термов с помощью логических операторов AND, OR и NOT. Например, в одном столбце базы данных, для которой создан полнотекстовый индекс, можно найти все строки со словом «латте» и фразой «пирожное с кремом». Оператор AND NOT служит для отрицания термов; например, «бублик» AND NOT «мак».
Используя предикат CONTAINS, помните, что SQL Server игнорирует неучитываемые слова, указанные в критериях поиска. Неучитываемые слова — это часто встречающиеся слова, которые не повышают эффективность поиска конкретного текста. Примерами могут служить слова «и», «или», «о» и «в». Дополнительные сведения о неучитываемых словах см. в разделе Неучитываемые слова.
См. также
Основные понятия
Запросы к SQL Server с использованием компонента Full-Text Search