Поделиться через


Начало работы с компонентом Full-Text Search

Область применения: SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure

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

Настройка полнотекстового поиска в два шага

Чтобы настроить полнотекстовый поиск, обычно требуется выполнить два основных шага:

  1. Создание полнотекстового каталога.
  2. Создание полнотекстового индекса по таблицам или индексированному представлению, где требуется произвести поиск.

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

Примечание.

Выполнение этих действий предполагает, что при установке SQL Server были установлены дополнительные компоненты полнотекстового поиска. В противном случае, чтобы их добавить, программу установки SQL Server необходимо будет перезапустить.

Настройка полнотекстового поиска с помощью мастера

Чтобы настроить полнотекстовый поиск с помощью мастера, ознакомьтесь со статьей Use the Full-Text Indexing Wizard (Использование мастера полнотекстового индексирования).

Настройка полнотекстового поиска с помощью Transact-SQL

В следующем примере из двух частей в образце базы данных AdventureWorks создается полнотекстовый каталог с именем AdvWksDocFTCat, затем создается полнотекстовый индекс в таблице Document образца базы данных. Эта инструкция создает полнотекстовый каталог в папке по умолчанию, указанной во время установки SQL Server, то есть папка AdvWksDocFTCat будет вложена в каталог по умолчанию.

  1. Для создания полнотекстового каталога AdvWksDocFTCatв примере используется инструкция CREATE FULLTEXT CATALOG :

    USE AdventureWorks;  
    GO  
    CREATE FULLTEXT CATALOG AdvWksDocFTCat;  
    

    Дополнительные сведения см. в статье Создание полнотекстовых каталогов и управление ими.

  2. Однако перед созданием полнотекстового индекса для таблицы Document следует убедиться, что в ней определен уникальный индекс с одним столбцом, не допускающий значений NULL. Следующая инструкция CREATE INDEX создает уникальный индекс ui_ukDocдля столбца DocumentID таблицы Document:

    CREATE UNIQUE INDEX ui_ukDoc ON Production.Document(DocumentNode);  
    
  3. Удалите существующий полнотекстовый индекс в таблице Document с помощью следующей инструкции DROP FULLTEXT INDEX.

    DROP FULLTEXT INDEX ON Production.Document
    GO
    
  4. После создания уникального ключа можно создать полнотекстовый индекс для таблицы Document с помощью следующей инструкции CREATE FULLTEXT INDEX .

    CREATE FULLTEXT INDEX ON Production.Document  
    (  
        Document                         --Full-text index column name   
            TYPE COLUMN FileExtension    --Name of column that contains file type information  
            Language 2057                 --2057 is the LCID for British English  
    )  
    KEY INDEX ui_ukDoc ON AdvWksDocFTCat --Unique index  
    WITH CHANGE_TRACKING AUTO            --Population type;  
    GO  
    
    

    Столбец TYPE COLUMN, определенный в этом примере, задает столбец типов в таблице, которая в каждой строке столбца «Document» (имеющего двоичный тип) содержит тип документа. Столбец типа хранит заданное пользователем расширение файла документа — DOC, XLS и т. д. — в данной строке. Средство полнотекстового поиска будет использовать это расширение для вызова соответствующего фильтра, который применяется для синтаксического анализа данных в данной строке. После того как фильтр выполнит синтаксический анализ двоичных данных в строке, указанное средство разбиения по словам выполнит синтаксический анализ содержимого. (В этом примере используется средство разбиения слов для британского английского языка.) Дополнительные сведения см. в разделе "Настройка и управление фильтрами для поиска".

    Дополнительные сведения см. в статье Create and Manage Full-Text Indexes (Создание полнотекстовых индексов и управление ими).

Выбор параметров полнотекстового индекса

Выбор языка

Сведения о выборе языка столбца см. в разделе Выбор языка при создании полнотекстового индекса.

Выбор файловой группы

Процесс создания полнотекстового индекса может сильно нагружать подсистему ввода-вывода. В итоге она состоит из чтения данных из SQL Server, а затем распространения отфильтрованные данные в полнотекстовый индекс. Рекомендуется размещать полнотекстовый индекс в той файловой группе базы данных, которая обеспечит максимальную производительность операций ввода-вывода, либо разместить полнотекстовые индексы в другой файловой группе на другом томе.

Выбор полнотекстового каталога

Таблицы с одинаковыми характеристиками обновления (например, небольшим числом изменений, в противоположность большому их количеству или частым изменением таблиц в определенное время дня) рекомендуется связывать с одним полнотекстовым каталогом. Если настроить расписание заполнения полнотекстового каталога, то полнотекстовые индексы будут синхронизироваться с таблицами, почти не влияя на использование ресурсов сервером баз данных в течение периодов высокой активности.

Ознакомьтесь со следующими рекомендациями:

  • Если индексируется таблица с миллионами строк, назначьте ее отдельному полнотекстовому каталогу.

  • Учитывайте количество изменений в таблице, в которой выполняется полнотекстовое индексирование, а также общее количество строк в ней. Если общее число изменяемых строк вместе с количеством строк в таблице на момент последнего полнотекстового заполнения исчисляется миллионами, назначьте эту таблицу отдельному полнотекстовому каталогу.

Сопоставление уникального индекса

Для полнотекстового уникального ключа всегда следует выбирать наименьший по размеру уникальный индекс. (4-байтовый, целочисленный индекс является оптимальным.) Это значительно сокращает ресурсы, необходимые Поиск (Майкрософт) службе в файловой системе. Если первичный ключ велик (более 100 байт), попробуйте выбрать в таблице другой уникальный индекс (или создайте другой уникальный индекс) в качестве полнотекстового уникального ключа. В противном случае, если размер полнотекстового уникального ключа превышает максимально разрешенный размер (900 байт), выполнить полнотекстовое заполнение не удастся.

Сопоставление списка стоп-слов

Список стоп-слов — это список, в котором перечислены стоп-слова, также известные как пропускаемые слова. Список стоп-слов связывается с каждым полнотекстовым индексом. Слова в данном списке применяются к полнотекстовым запросам в данном индексе. По умолчанию с новым полнотекстовым индексом связан системный список стоп-слов. Вы можете создать и использовать собственный список стоп-слов.

Например, следующая инструкция CREATE FULLTEXT STOPLIST Transact-SQL создает новый полнотекстовый список стоп-списков с именем myStoplist путем копирования из системного списка стоп-списков:

CREATE FULLTEXT STOPLIST myStoplist FROM SYSTEM STOPLIST;  
GO  

Следующая инструкция ALTER FULLTEXT STOPLIST Transact-SQL изменяет список стоп-списков с именем myStoplist , добавив слово en, сначала для испанского, а затем для французского:

ALTER FULLTEXT STOPLIST myStoplist ADD 'en' LANGUAGE 'Spanish';  
ALTER FULLTEXT STOPLIST myStoplist ADD 'en' LANGUAGE 'French';  
GO  

Дополнительные сведения см. в разделе Настройка стоп-слов и списков стоп-слов для полнотекстового поиска и управление ими.

Обновление полнотекстового индекса

Как и обычные индексы SQL Server, полнотекстовые индексы можно автоматически обновлять при изменении данных в связанных таблицах. Это поведение принимается по умолчанию. Обновлять полнотекстовые индексы можно и вручную либо по заданному расписанию. Заполнение полнотекстового индекса может потребовать значительного времени и ресурсов, из-за чего обновление индекса обычно выполняется как асинхронный процесс в фоновом режиме, обновляющий полнотекстовый индекс после внесения изменений в базовую таблицу.

Для немедленного обновления полнотекстового индекса после каждого изменения в базовой таблице может также потребоваться большой объем ресурсов. Следовательно, если обновление, вставка или удаление выполняются часто, то производительность запросов может снизиться. В таком случае попробуйте выполнять обновления отслеживания изменений вручную по определенному расписанию. Это позволит обрабатывать больше изменений в определенные моменты времени, а не конкурировать за ресурсы с запросами.

Дополнительные сведения см. в статье Заполнение полнотекстовых индексов.

Следующие шаги

После настройки полнотекстового поиска SQL Server вы можете приступить к выполнению полнотекстовых запросов. Дополнительные сведения см. в статье Запрос с полнотекстовым поиском.