Общие сведения о полнотекстовом поиске

Полнотекстовые запросы выполняют лингвистический поиск в текстовых данных в полнотекстовых индексах путем обработки слов и фраз в соответствии с правилами данного языка, например английского или японского. Полнотекстовые запросы могут включать простые слова и фразы или несколько форм слова или фразы.

Полнотекстовый поиск применяется в широком диапазоне бизнес-сценариев. Например, в электронном бизнесе — для поиска элементов на веб-сайте; в работе юридических фирм — для поиска историй дел в архиве юридических данных; в работе отделов кадров — для сопоставления описаний работы с хранимыми резюме. Основные административные задачи и задачи разработки полнотекстового поиска одинаковы независимо от бизнес-сценариев. Однако в конкретном бизнес-сценарии полнотекстовые запросы и индекс могут настраиваться с учетом той или иной специфики. Например, для электронного бизнеса повышение производительности может быть более важным, чем ранжирование результатов, точность повторного вызова (количество существующих совпадений, фактически возвращенных полнотекстовым запросом) или поддержка нескольких языков. Для юридической фирмы наиболее важным может быть возвращение каждого возможного попадания (общая выборка информации).

Общие сведения о способах настройки базы данных для полнотекстового поиска

Для любого сценария для настройки столбцов таблицы базы данных для полнотекстового поиска администратор базы данных выполняет следующие шаги.

  1. Создание полнотекстового каталога.

  2. В каждой таблице, в которой нужно производить поиск, следует создать полнотекстовый индекс одним из приведенных ниже способов.

    1. Определить все текстовые столбцы, которые нужно включить в полнотекстовый индекс.

    2. Если данный столбец содержит документы, которые хранятся в виде двоичных данных (тип данных varbinary(max) или image), то необходимо задать столбец таблицы (столбец типа), определяющий тип каждого документа в индексируемом столбце.

    3. Указать язык, который полнотекстовый поиск должен использовать для документов в столбце.

    4. Выбрать механизм отслеживания изменений, с помощью которого в полнотекстовом индексе будут отслеживаться изменения в базовой таблице и ее столбцах.

Полнотекстовый поиск поддерживает несколько языков благодаря использованию следующих лингвистических компонентов: средства разбиения по словам и парадигматические модули, списки стоп-слов, содержащие стоп-слова (называемые также пропускаемыми словами), и файлы тезауруса. Для файлов тезауруса и в некоторых случаях для списков стоп-слов требуется настройка, выполняемая администратором базы данных. Данный файл тезауруса поддерживает все полнотекстовые индексы, которые используют соответствующий язык, а данный список стоп-слов может быть связан с любым необходимым числом полнотекстовых индексов.

Дополнительные сведения см. в разделе Администрирование компонента Full-Text Search.

Общие сведения о полнотекстовых запросах

После добавления столбцов в полнотекстовый индекс приложения и пользователи могут выполнять полнотекстовые запросы на тексте в столбцах. Эти запросы могут вести поиск любых приведенных ниже элементов.

  • Одно или несколько конкретных слов или фраз (простое выражение).

  • Слова, начинающиеся заданным текстом, или фразы с такими словами (префиксные выражения).

  • Словоформы конкретного слова (производное выражение).

  • Слова или фразы, находящиеся рядом с другими словами или фразами (выражения с учетом расположения).

  • Синонимические формы конкретного слова (тезаурус).

  • Слова или фразы с взвешенными значениями (взвешенное выражение).

Все полнотекстовые запросы используют небольшой набор Transact-SQL предикатов (CONTAINS и FREETEXT) и функций (CONTAINSTABLE и FREETEXTTABLE). Однако точная структура полнотекстовых запросов определяется целями поиска данного бизнес-сценария. Примеры.

  • Электронный бизнес — поиск продукта на веб-сайте:

    SELECT product_id FROM products WHERE CONTAINS(product_description, ”Snap Happy 100EZ” OR FORMSOF(THESAURUS,’Snap Happy’) OR ‘100EZ’) AND product_cost<200 …
    
  • Сценарий комплектования штата — поиск на должность кандидатов, имеющих опыт работы с SQL Server:

    SELECT candidate_name,SSN FROM candidates WHERE CONTAINS(candidate_resume,”SQL Server”) AND candidate_division =DBA
    

Дополнительные сведения см. в разделе Запросы к SQL Server с использованием компонента Full-Text Search.

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

В отличие от полнотекстового поиска, предикат LIKE Transact-SQL работает только на последовательностях шаблонов. Кроме того, предикат LIKE нельзя использовать в запросах к форматированным двоичным данным. Более того, запрос с предикатом LIKE к большому количеству неструктурированных текстовых данных выполняется гораздо медленнее, чем эквивалентный полнотекстовый запрос к тем же данным. Выполнение запроса LIKE к миллионам строк текстовых данных может занять несколько минут, в то время как полнотекстовый запрос к тем же данным занимает всего несколько секунд или даже меньше в зависимости от количества возвращаемых строк.