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

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

В этом разделе

  • Типы заполнения

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

  • Создание или изменение расписания для добавочных заполнений

  • Устранение ошибок в заполнении средства полнотекстового поиска (сканирование)

Типы заполнения

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

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

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

По умолчанию SQL Server полностью заполняет новый полнотекстовый индекс сразу после его создания. Однако полное заполнение может потреблять значительный объем ресурсов. Поэтому при создании полнотекстовых индексов во время периодов наибольшей потребности в ресурсах часто полезно бывает отложить полное заполнение на период наименьшего потребления ресурсов, особенно если базовая таблица полнотекстового индекса имеет большой размер. Однако полнотекстовый каталог, к которому относится индекс, нельзя использовать, пока не будут заполнены все его полнотекстовые индексы. Чтобы создать полнотекстовый индекс, но не заполнять его немедленно, укажите в инструкции CREATE FULLTEXT INDEX предложение CHANGE_TRACKING OFF, NO POPULATION. Если указан параметр CHANGE_TRACKING MANUAL, то средство полнотекстового поиска использует инструкцию. SQL Server не будет заполнять новый полнотекстовый индекс до выполнения инструкции ALTER FULLTEXT INDEX с предложением START FULL POPULATION или START INCREMENTAL POPULATION. Дополнительные сведения см. в примерах «А. Создание полнотекстового индекса без выполнения полного заполнения» и «Б. Выполнение полного заполнения в таблице», приведенных далее в этом разделе.

[В начало]В начало

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

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

ПримечаниеПримечание

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

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

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

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

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

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

    Дополнительные сведения см. в примере «Д. Переключение полнотекстового индекса на автоматическое отслеживание изменений» далее в этом разделе.

  • Заполнение вручную

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

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

    Дополнительные сведения см. в примерах «В. Создание полнотекстового индекса с отслеживанием изменений вручную» и «Г. Выполнение заполнения вручную» далее в этом разделе.

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

[В начало]В начало

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

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

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

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

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

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

[В начало]В начало

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

ПримечаниеПримечание

В примерах этого раздела используется таблица Production.Document или HumanResources.JobCandidate образца базы данных AdventureWorks.

А.Создание полнотекстового индекса без выполнения полного заполнения

В следующем примере создается полнотекстовый индекс для таблицы 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;

В.Создание полнотекстового индекса с отслеживанием изменений вручную

В следующем примере создается полнотекстовый индекс, который будет использовать отслеживание изменений с заполнением вручную в таблице 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

Д.Переключение полнотекстового индекса на автоматическое отслеживание изменений

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

USE AdventureWorks;
GO
ALTER FULLTEXT INDEX ON HumanResources.JobCandidate SET CHANGE_TRACKING AUTO;
GO 

[В начало]В начало

Создание или изменение расписания для добавочных заполнений

Создание или изменение расписания добавочных заполнений в Management Studio

  1. В обозревателе объектов разверните узел сервера.

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

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

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

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

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

    Важное примечаниеВажно!

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

    Ниже приведены доступные параметры.

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

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

      Важное примечаниеВажно!

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

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

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

      ПримечаниеПримечание

      Сведения об изменении задания см. в разделе Изменение задания.

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

  2. Нажмите кнопку ОК.  

[В начало]В начало

Устранение ошибок в заполнении средства полнотекстового поиска (сканирование)

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

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

  • <DatabaseID>
    Идентификатор базы данных. <dbid> является пятизначным числом с нулем в начале.

  • <FullTextCatalogID>
    Идентификатор полнотекстового каталога. <catid> является пятизначным числом с нулем в начале.

  • <n>
    Целое число, свидетельствующее о существовании одного или нескольких журналов сканирования одного полнотекстового каталога.

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

[В начало]В начало

См. также

Справочник

sys.dm_fts_index_population (Transact-SQL)

CREATE FULLTEXT INDEX (Transact-SQL)

ALTER FULLTEXT INDEX (Transact-SQL)

Основные понятия

Приступая к работе с компонентом Full-Text Search

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