Заполнение полнотекстовых индексов

Применяется к:SQL ServerAzure SQL DatabaseAzure, управляемому экземпляру SQL Azure

Создание и обслуживание полнотекстового индекса включает процесс заполнения индекса (которое также называется сканированием).

Типы населения

Полнотекстовый индекс поддерживает следующие типы заполнения:

  • полное заполнение;
  • заполнение на основе отслеживания изменений (автоматическое или вручную);
  • добавочное заполнение с использованием отметок времени.

полное заполнение;

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

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

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

Чтобы создать полнотекстовый индекс, но не заполнять его немедленно, укажите в инструкции CREATE FULLTEXT INDEX предложение CHANGE_TRACKING OFF, NO POPULATION. Если указать CHANGE_TRACKING MANUAL, то средство полнотекстового поиска не будет заполнять новый полнотекстовый индекс до выполнения инструкции ALTER FULLTEXT INDEX с предложением START FULL POPULATION или START INCREMENTAL POPULATION.

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

В следующем примере создается полнотекстовый индекс для таблицы Production.Document образца базы данных AdventureWorks . В этом примере используется параметр WITH CHANGE_TRACKING OFF, NO POPULATION для задержки первоначального полного заполнения.

CREATE UNIQUE INDEX ui_ukDoc ON Production.Document(DocumentID);  
CREATE FULLTEXT CATALOG AW_Production_FTCat;  
CREATE FULLTEXT INDEX ON Production.Document  
(  
    Document                         --Full-text index column name   
        TYPE COLUMN FileExtension    --Name of column that contains file type information  
        Language 1033                 --1033 is LCID for the English language  
)  
    KEY INDEX ui_ukDoc  
    ON AW_Production_FTCat  
    WITH CHANGE_TRACKING OFF, NO POPULATION;  
GO  
  

Пример выполнения полного заполнения в таблице

В следующем примере полное заполнение выполняется в таблице Production.Document образца базы данных AdventureWorks .

ALTER FULLTEXT INDEX ON Production.Document  
   START FULL POPULATION;  

Заполнение на основе отслеживания изменений

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

Заметка

Для таблиц, содержащих столбец timestamp, вместо отслеживания изменений можно использовать добавочное заполнение.

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

Включить отслеживание изменений

Отслеживания изменений выполняется двумя способами:

  • Автоматически (параметр CHANGE_TRACKING AUTO). По умолчанию используется автоматическое отслеживание изменений.
  • Вручную (параметр CHANGE_TRACKING MANUAL).

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

  • Автоматическое заполнение

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

    Запуск отслеживания изменений с автоматическим заполнением

    Пример переключения полнотекстового индекса на автоматическое отслеживание изменений
    В следующем примере полнотекстовый индекс таблицы HumanResources.JobCandidate образца базы данных AdventureWorks переключается на отслеживание изменений с автоматическим заполнением.

    USE AdventureWorks;  
    GO  
    ALTER FULLTEXT INDEX ON HumanResources.JobCandidate SET CHANGE_TRACKING AUTO;  
    GO   
    
  • Заполнение вручную

    Если задан параметр CHANGE_TRACKING MANUAL, то средство полнотекстового поиска использует заполнение полнотекстового индекса вручную. После завершения первоначального полного заполнения изменения отслеживаются по мере изменения данных в базовой таблице. Однако они не распространяются на полнотекстовый индекс, пока не выполните ALTER FULLTEXT INDEX ... Инструкция START UPDATE POPULATION. Агент SQL Server можно использовать для периодического вызова инструкции Transact-SQL.

    Запуск отслеживания изменений с заполнением вручную

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

    USE AdventureWorks;  
    GO  
    CREATE UNIQUE INDEX ui_ukJobCand ON HumanResources.JobCandidate(JobCandidateID);  
    CREATE FULLTEXT CATALOG ft AS DEFAULT;  
    CREATE FULLTEXT INDEX ON HumanResources.JobCandidate(Resume)   
       KEY INDEX ui_ukJobCand   
       WITH CHANGE_TRACKING=MANUAL;  
    GO  
    

    Пример выполнения заполнения вручную
    В следующем примере выполняется заполнение вручную на полнотекстовом индексе с отслеживанием изменений для таблицы HumanResources.JobCandidate образца базы данных AdventureWorks .

    USE AdventureWorks;  
    GO  
    ALTER FULLTEXT INDEX ON HumanResources.JobCandidate START UPDATE POPULATION;  
    GO  
    

Включение отслеживания изменений

добавочное заполнение с использованием отметок времени.

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

Можно запустить добавочное заполнение для полнотекстового индекса, у которого параметру CHANGE_TRACKING присвоено значение MANUAL или OFF.

Для выполнения добавочного заполнения проиндексированная таблица должна включать столбец типа timestamp . Если столбца типа timestamp в таблице нет, добавочное заполнение невозможно.

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

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

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

Запуск добавочного заполнения

Для запуска добавочного заполнения выполните инструкцию ALTER FULLTEXT INDEX с использованием предложения START INCREMENTAL POPULATION.

Создание или изменение расписания для добавочной совокупности

  1. В обозревателе объектов среды Management Studio разверните сервер.

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

  3. Раскройте узел Таблицы.

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

    Внимание

    Если базовая таблица или представление не содержат столбец типа данных timestamp, то выполнить добавочное заполнение невозможно.

  4. На панели Выбор страницы выберите пункт Расписания.

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

    Существуют следующие варианты выбора.

    • Чтобы создать новое расписание, щелкните Создать.

      Откроется диалоговое окно Создание расписания полнотекстового индексирования таблицы , в котором можно создать расписание. Чтобы сохранить расписание, нажмите кнопку ОК.

      Внимание

      Задание агента SQL Server (запуск добавочного заполнения таблицы на имя_базы_данных.имя_таблицы) связывается с новым расписанием после выхода из диалогового окна Свойства полнотекстового индекса . Если создается несколько расписаний для того же полнотекстового индекса, то все они используют одно и то же задание.

    • Чтобы изменить существующее расписание, выберите существующее расписание и щелкните Изменить.

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

      Заметка

      Сведения об изменении задания агента SQL Server см. в этой статье.

    • Чтобы удалить существующее расписание, выберите существующее расписание и щелкните Удалить.

  5. Нажмите ОК.

Устранение ошибок в полнотекстовой совокупности (обход)

При возникновении ошибки во время сканирования модуль протоколирования сканирования, входящий в механизм полнотекстового поиска, создает и обновляет журнал сканирования, хранящийся в текстовом файле. Каждый журнал сканирования соответствует конкретному полнотекстовому каталогу. По умолчанию журналы сканирования для конкретного экземпляра (в нашем случае — для экземпляра по умолчанию) хранятся в папке %ProgramFiles%\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\LOG.

Имена файлов журналов сканирования имеют следующий формат.

SQLFT<DatabaseID><FullTextCatalogID>.LOG[<n>]

Ниже перечислены переменные части в именах файла журнала сканирования.

  • <DatabaseID> — идентификатор базы данных. <dbid> — это пять цифр с начальными нулями.
  • <FullTextCatalogID> — идентификатор полнотекстового каталога. <catid> — это пять цифр с начальными нулями.
  • <n> — целое число, указывающее, что существует один или несколько журналов обхода одного полнотекстового каталога.

Например, SQLFT0000500008.2 является файлом журнала сканирования для базы данных с идентификатором базы данных 5 и идентификатором полнотекстового каталога 8. Двойка в конце имени файла показывает, что этой паре базы данных и каталога соответствуют два файла журналов сканирования.

См. также

sys.dm_fts_index_population (Transact-SQL)
Начало работы с компонентом Full-Text Search
Создание и управление полнотекстовыми индексами
CREATE FULLTEXT INDEX (Transact-SQL)
ALTER FULLTEXT INDEX (Transact-SQL)