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


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 отключает.

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

  • 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
      Задает имя списка стоп-слов, который будет связан с полнотекстовым индексом.

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

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

Замечания

Для столбцов 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 базы данных AdventureWorks.

USE AdventureWorks;
GO
ALTER FULLTEXT INDEX ON HumanResources.JobCandidate ENABLE;
GO

Журнал изменений

Обновления

Обновлен раздел «Взаимодействие между отслеживанием изменений и параметром NO POPULATION» — исправлены значения для столбца WITH NO POPULATION в том случае, если включено отслеживание изменений.