ALTER FULLTEXT INDEX (Transact-SQL)

Изменяет свойства полнотекстового индекса.

Значок ссылки на разделСинтаксические обозначения в Transact-SQL

Синтаксис

ALTER FULLTEXT INDEX ON table_name
   { ENABLE 
   | DISABLE
   | SET CHANGE_TRACKING { MANUAL | AUTO | OFF }
   | ADD ( column_name 
     [ TYPE COLUMN type_column_name ] 
     [ LANGUAGE language_term ] [,...n] )
     [ WITH NO POPULATION ]
   | DROP ( column_name [,...n] )
     [ WITH NO POPULATION ] 
   | START { FULL | INCREMENTAL | UPDATE } POPULATION
   | {STOP | PAUSE | RESUME } POPULATION 
   | SET STOPLIST { OFF| SYSTEM | stoplist_name }
     [ WITH NO POPULATION ] 
   }
[;]

Аргументы

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

  • ENABLE | DISABLE
    Указывает SQL Server, нужно ли собирать данные полнотекстового индекса для таблицы table_name. Значение ENABLE активирует полнотекстовый индекс, значение DISABLE отключает. Таблица не поддерживает полнотекстовые запросы, если индекс отключен.

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

  • SET CHANGE_TRACKING {MANUAL | AUTO | OFF}
    Указывает, будет ли SQL Server распространять на полнотекстовый индекс изменения (обновления, удаления или вставки), выполненные в столбцах таблицы, которые включены в полнотекстовый индекс. Изменения данных, внесенные с помощью инструкций WRITETEXT и UPDATETEXT, не отражаются в полнотекстовом индексе и не отмечаются при отслеживании изменений.

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

    Дополнительные сведения о взаимодействии между отслеживанием изменений и предложением WITH NO POPULATION см. в подразделе «Примечания» далее в этом разделе.

  • MANUAL
    Указывает, что отслеживаемые изменения будут распространяться вручную путем вызова инструкции Transact-SQL ALTER FULLTEXT INDEX … START UPDATE POPULATION (заполнение вручную). Агент SQL Server можно использовать для периодического вызова инструкции Transact-SQL.

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

  • OFF
    Указывает, что SQL Server не будет вести список изменений в индексированных данных.

  • ADD | DROP column_name
    Указывает столбцы, добавляемые или удаляемые из полнотекстового индекса. Столбец или столбцы должны иметь тип char, varchar, nchar, nvarchar, text, ntext, image, xml, varbinary или varbinary(max).

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

    Следует использовать параметры TYPE COLUMN и LANGUAGE с предложением ADD, чтобы назначить эти свойства для столбца column_name. После добавления столбца полнотекстовый индекс таблицы должен быть заполнен повторно, чтобы обеспечить выполнение полнотекстовых запросов к этому столбцу.

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

    Заполняется ли полнотекстовый индекс после добавления или удаления столбца полнотекстового индекса, зависит от того, включено ли отслеживание изменений и указано ли предложение WITH NO POPULATION. Дополнительные сведения см. в подразделе «Примечания» далее в этом разделе.

  • TYPE COLUMN type_column_name
    Указывает имя столбца таблицы (type_column_name), в котором хранится тип документа для документов varbinary, varbinary(max) или image. Этот столбец называется столбцом типа и содержит указываемое пользователем расширение файла (.DOC, .PDF, .XLS и т. д.) Столбец типа должен иметь тип char, nchar, varchar или nvarchar.

    Указывайте параметр TYPE COLUMN type_column_name только в случае, когда в параметре column_name указан столбец varbinary, varbinary(max) или image, где данные хранятся в двоичном виде. В противном случае SQL Server возвратит ошибку.

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

    Во время индексирования средство полнотекстового поиска использует сокращение в столбце типа каждой строки таблицы, чтобы определить, какой фильтр полнотекстового поиска нужно использовать для документа, указанного в параметре column_name. Фильтр загружает документ в виде двоичного потока, удаляет данные форматирования и отправляет текст из документа в компонент разбиения по словам. Дополнительные сведения см. в разделе Фильтры полнотекстового поиска.

  • LANGUAGE language_term
    Язык данных, хранящихся в столбце column_name.

    Аргумент language_term необязателен и может быть задан как строковое, целочисленное или шестнадцатеричное значение, соответствующее локали языка (LCID). Если параметр language_term задан, то соответствующий язык будет применяться ко всем элементам условия поиска. Если не указано никакого значения, по умолчанию используется язык полнотекстового поиска экземпляра SQL Server.

    Для доступа к данным о языке полнотекстового поиска по умолчанию экземпляра SQL Server следует использовать хранимую процедуру sp_configure. Дополнительные сведения см. в разделе Параметр default full-text language.

    Если аргумент language_term задан в виде строки, то он соответствует значению столбца alias системной таблицы syslanguages. Строка должна быть заключена в одиночные кавычки: 'language_term'. Если значением аргумента language_term является целое число, оно представляет собой действительный код языка. Если аргумент language_term указан как шестнадцатеричное значение, он записывается как 0x, за которым следует шестнадцатеричное значение кода языка. Длина шестнадцатеричного значения не должна превышать восьми цифр, включая ведущие нули.

    Если значение указано в двухбайтовой кодировке (DBCS), SQL Server преобразует его в Юникод.

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

    Для столбцов, имеющих типы, отличные от BLOB и XML, которые содержат текстовые данные на нескольких языках, или в случаях, когда язык текста в столбце неизвестен, используйте нейтральный (0x0) языковой ресурс. Для документов, хранящихся в столбцах типов XML или BLOB, во время индексирования будет использоваться внутренняя языковая кодировка документа. Например: в столбцах XML атрибут xml:lang в XML-документе будет идентифицировать язык. Во время запроса значение, ранее указанное для аргумента language_term, становится используемым по умолчанию языком в полнотекстовых индексах, если аргумент language_term не указан как часть полнотекстового запроса.

  • [ ,...n]
    Указывает, что для предложений ADD и DROP может быть указано несколько столбцов. Если указано несколько столбцов, то эти столбцы следует разделить запятыми.

  • WITH NO POPULATION
    Указывает, что полнотекстовый индекс не будет заполнен после операции ADD или DROP над столбцом или операции SET STOPLIST. Индекс будет заполнен, только если пользователь выполняет команду START...POPULATION.

    Если указан параметр NO POPULATION, SQL Server не заполняет индекс. Индекс заполняется только после того, как пользователь выдает команду ALTER FULLTEXT INDEX...START POPULATION. Если параметр NO POPULATION не указан, SQL Server заполняет индекс.

    Если состояние CHANGE_TRACKING включено и указано предложение WITH NO POPULATION, то SQL Server возвращает ошибку. Если состояние CHANGE_TRACKING включено и не предложение WITH NO POPULATION не указано, SQL Server выполняет полное заполнение индекса.

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

    Дополнительные сведения о взаимодействии между отслеживанием изменений и предложением WITH NO POPULATION см. в подразделе «Примечания» далее в этом разделе.

  • START {FULL|INCREMENTAL|UPDATE} POPULATION
    Указывает SQL Server начать заполнение полнотекстового индекса table_name. Если заполнение полнотекстового индекса уже выполняется, то SQL Server возвращает предупреждение и не начинает нового заполнения.

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

    • INCREMENTAL
      Указывает, что только строки, измененные со времени последнего заполнения, должны извлекаться для полнотекстового индексирования. Аргумент INCREMENTAL применим, только если в таблице есть столбец типа timestamp. Если таблица в полнотекстовом каталоге не содержит столбец типа timestamp, то выполняется заполнение FULL.

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

  • {STOP | PAUSE | RESUME } POPULATION
    Останавливает или приостанавливает процесс заполнения; либо останавливает или возобновляет приостановленное заполнение.

    Предложение STOP POPULATION не останавливает автоматическое отслеживание изменений или фоновое обновление индекса. Чтобы остановить отслеживание изменений, следует использовать команду SET CHANGE_TRACKING OFF.

    Предложения PAUSE POPULATION и RESUME POPULATION могут использоваться только для полных заполнений. Они не существенны для других типов заполнения, так как последние возобновляют сканирование с момента, когда сканирование было остановлено.

  • SET STOPLIST { OFF| SYSTEM | stoplist_name }
    Изменяет полнотекстовый список стоп-слов, связанный с индексом, если он есть.

    • OFF
      Указывает, что с полнотекстовым индексом не связан ни один из списков стоп-слов.

    • SYSTEM
      Указывает, что для полнотекстового индекса должен использоваться системный полнотекстовый список стоп-слов по умолчанию.

    • stoplist_name
      Задает имя списка стоп-слов, который будет связан с полнотекстовым индексом.

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

Замечания

Для столбцов xml можно создать полнотекстовый индекс, который индексирует содержимое XML-элементов, но пропускает XML-разметку. К значениям атрибута, если они не являются числовыми значениями, применяется полнотекстовый индекс. Теги элементов используются в качестве границ токенов. Поддерживаются XML- или HTML-документы и фрагменты правильного формата, содержащие несколько языков. Дополнительные сведения см. в разделе Полнотекстовый индекс XML-столбца.

Взаимодействие между отслеживанием изменений и параметром NO POPULATION

Заполнение полнотекстового индекса зависит от того, включено ли отслеживание изменений и указано ли предложение WITH NO POPULATION в инструкции ALTER FULLTEXT INDEX. В следующей таблице описывается результат их взаимодействия.

Отслеживание изменений

WITH NO POPULATION

Результат

Не включено

Не указано

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

Не включено

Указано

Заполнение полнотекстового индекса не выполняется, если не выполнена инструкция ALTER FULLTEXT INDEX...START POPULATION.

Включено

Указано

Формируется ошибка. Индекс не изменяется.

Включено

Не указано

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

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

Разрешения

Пользователь должен иметь разрешение ALTER на таблицу или индексированное представление, быть членом предопределенной роли сервера sysadmin или предопределенной роли базы данных db_ddladmin или db_owner.

Если указано предложение SET STOPLIST, пользователь должен иметь разрешение REFERENCES на список стоп-слов. Это разрешение может быть предоставлено владельцем списка стоп-слов. Кроме того, предоставление разрешения REFERENCES требует разрешений ALTER FULLTEXT CATALOG.

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

Любому пользователю предоставлено разрешение REFERENCE на список стоп-слов по умолчанию, поставляемый в составе SQL Server.

Примеры

А. Задание отслеживания изменений вручную

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

USE AdventureWorks2008R2;
GO
ALTER FULLTEXT INDEX ON HumanResources.JobCandidate
   SET CHANGE_TRACKING MANUAL;
GO

Б. Запуск полного заполнения

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

USE AdventureWorks2008R2;
GO
ALTER FULLTEXT INDEX ON HumanResources.JobCandidate 
   START FULL POPULATION;
GO