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 ]
     [ STATISTICAL_SEMANTICS ]
 [,...n] )
     [ WITH NO POPULATION ]
   | ALTER COLUMN column_name
     { ADD | DROP } STATISTICAL_SEMANTICS
     [ 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 ] 
   | SET SEARCH PROPERTY LIST [ = ] { OFF | property_list_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.

    Если аргумент 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 не указан как часть полнотекстового запроса.

  • STATISTICAL_SEMANTICS
    Создает дополнительные индексы ключевых фраз и подобия документов, которые являются частью статистического семантического индексирования. Дополнительные сведения см. в разделе Семантический поиск (SQL Server).

  • [ ,...n]
    Указывает, что для предложений ADD, ALTER и 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 см. в подразделе «Примечания» далее в этом разделе.

  • {ADD | DROP } STATISTICAL_SEMANTICS
    Включает или отключает статистическое семантическое индексирование для указанных столбцов. Дополнительные сведения см. в разделе Семантический поиск (SQL Server).

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

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

  • SET SEARCH PROPERTY LIST { OFF | property_list_name } [ WITH NO POPULATION ]
    Изменяет список свойств поиска, связанный с индексом, если он есть.

    • OFF
      Указывает, что с полнотекстовым индексом не связан ни один список свойств. При отключении списка свойств поиска полнотекстового индекса (ALTER FULLTEXT INDEX … SET SEARCH PROPERTY LIST OFF) поиск по свойствам в базовой таблице станет невозможен.

      По умолчанию при отключении существующего списка свойств поиска автоматически производится повторное заполнение полнотекстового индекса. Если при отключении списка свойств поиска указать WITH NO POPULATION, автоматическое повторное заполнение не выполняется. Однако рекомендуется выполнить полное заполнение этого полнотекстового индекса в удобное время. При повторном заполнении полнотекстового индекса удаляются относящиеся к свойствам метаданные для каждого удаленного свойства и индекс становится компактнее и эффективнее.

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

      Добавление к полнотекстовому индексу списка свойств поиска требует повторного заполнения индекса, чтобы проиндексировать свойства поиска, зарегистрированные в этом списке. Если при добавлении списка свойств поиска указать WITH NO POPULATION, то в подходящее время потребуется выполнить заполнение индекса.

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

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

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

      Один список свойств поиска может быть связан с несколькими полнотекстовыми индексами в той же базе данных.

      Чтобы найти списки свойств поиска в текущей базе данных

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

Замечания

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

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

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

WITH NO POPULATION

Результат

Не включено

Не указано

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

Не включено

Указано

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

Включено

Указано

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

Включено

Не указано

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

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

Изменение списка свойств поиска приводит к перестроению индекса

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

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

Перестроение выполняется в следующих случаях:

  • Прямое переключение на другой список свойств поиска (см. «Сценарий А» ниже в этом разделе).

  • Отключение списка свойств поиска с последующим связыванием индекса с другим списком (см. «Сценарий Б» ниже в этом разделе).

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

Дополнительные сведения о том, как полнотекстовый поиск работает со списками свойств поиска, см. в разделе Поиск свойств документа с использованием списков свойств поиска. Сведения о полном заполнении см. в разделе Заполнение полнотекстовых индексов.

Сценарий А. Прямое переключение на другой список свойств поиска

  1. Создан полнотекстовый индекс для таблицы table_1 со списком свойств поиска spl_1:

    CREATE FULLTEXT INDEX ON table_1 (column_name) KEY INDEX unique_key_index 
       WITH SEARCH PROPERTY LIST=spl_1, 
       CHANGE_TRACKING OFF, NO POPULATION; 
    
  2. Выполняется полное заполнение для полнотекстового индекса:

    ALTER FULLTEXT INDEX ON table_1 START FULL POPULATION;
    
  3. Затем полнотекстовый индекс связывается с другим списком свойств поиска, spl_2, с помощью следующей инструкции:

    ALTER FULLTEXT INDEX ON table_1 SET SEARCH PROPERTY LIST spl_2;
    

    Эта инструкция вызывает полное заполнение — действие по умолчанию. Однако перед началом заполнения индекса средство полнотекстового поиска автоматически усекает его.

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

  1. Создан полнотекстовый индекс для таблицы table_1 со списком свойств поиска spl_1, после чего автоматически выполнено полное заполнение (действие по умолчанию):

    CREATE FULLTEXT INDEX ON table_1 (column_name) KEY INDEX unique_key_index 
       WITH SEARCH PROPERTY LIST=spl_1; 
    
  2. Отключается список свойств поиска, следующим образом.

    ALTER FULLTEXT INDEX ON table_1 
       SET SEARCH PROPERTY LIST OFF WITH NO POPULATION; 
    
  3. Полнотекстовый индекс снова связывается либо с тем же, либо с другим списком свойств поиска.

    Например, следующая инструкция связывает полнотекстовый индекс с первоначальным списком свойств поиска — spl_1:

    ALTER FULLTEXT INDEX ON table_1 SET SEARCH PROPERTY LIST spl_1;
    

    Эта инструкция запускает полное заполнение (действие по умолчанию).

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

    Перестроение потребуется также и для другого списка свойств поиска — spl_2.

Разрешения

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

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

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

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

Примеры

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

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

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

Б.Связывание списка свойств с полнотекстовым индексом

В следующем примере производится связывание списка свойств DocumentPropertyList с полнотекстовым индексом таблицы Production.Document в базе данных AdventureWorks. Эта инструкция ALTER FULLTEXT INDEX начинает полное заполнение — поведением по умолчанию для предложения SET SEARCH PROPERTY LIST.

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

Пример создания списка свойств DocumentPropertyList см. в разделе CREATE SEARCH PROPERTY LIST (Transact-SQL).

USE AdventureWorks;
GO
ALTER FULLTEXT INDEX ON Production.Document 
   SET SEARCH PROPERTY LIST DocumentPropertyList; 
GO

В.Удаление списка свойств поиска

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

USE AdventureWorks;
GO
ALTER FULLTEXT INDEX ON Production.Document 
   SET SEARCH PROPERTY LIST OFF WITH NO POPULATION; 
GO

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

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

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

См. также

Справочник

sys.fulltext_indexes (Transact-SQL)

CREATE FULLTEXT INDEX (Transact-SQL)

DROP FULLTEXT INDEX (Transact-SQL)

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

Компонент Full-Text Search (SQL Server)

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