CREATE FULLTEXT INDEX (Transact-SQL)
Создает полнотекстовый индекс по таблице или индексированному представлению в базе данных. Для таблицы или индексированного представления допускается только один полнотекстовый индекс, а каждый полнотекстовый индекс применяется только к одной таблице или индексированному представлению.
Полнотекстовый индекс может содержать не более 1024 столбцов.
Синтаксис
CREATE FULLTEXT INDEX ON table_name
[ ( { column_name
[ TYPE COLUMN type_column_name ]
[ LANGUAGE language_term ]
} [ ,...n]
) ]
KEY INDEX index_name
[ ON <catalog_filegroup_option> ]
[ WITH [ ( ] <with_option> [ ,...n] [ ) ] ]
[;]
<catalog_filegroup_option>::=
{
fulltext_catalog_name
| ( fulltext_catalog_name, FILEGROUP filegroup_name )
| ( FILEGROUP filegroup_name, fulltext_catalog_name )
| ( FILEGROUP filegroup_name )
}
<with_option>::=
{
CHANGE_TRACKING [ = ] { MANUAL | AUTO | OFF [, NO POPULATION ] }
| STOPLIST [ = ] { OFF | SYSTEM | stoplist_name }
}
Аргументы
table_name
Имя таблицы или индексированного представления, содержащего столбец или столбцы, включенные в полнотекстовый индекс.column_name
Имя столбца, включенного в полнотекстовый индекс. Индексировать для полнотекстового поиска можно только столбцы типов char, varchar, nchar, nvarchar, text, ntext, image, xml, varbinary и varbinary(max). Чтобы задать несколько столбцов, предложение column_name повторяется следующим образом:CREATE FULLTEXT INDEX ON table_name (column_name1 […], column_name2 […]) …
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). Если не задано никакого значения, используется язык экземпляра SQL Server, установленный по умолчанию.
Если аргумент language_term указан, представленный им язык будет использоваться при индексировании данных, хранящихся в столбцах типов char, nchar, varchar, nvarchar, text и ntext. Этот язык используется в запросах по умолчанию, если аргумент language_term не задан как часть полнотекстового предиката, характеризующего столбец.
Если аргумент language_term указан как строка, он соответствует значению столбца alias системной таблицы syslanguages. Строка должна быть заключена в одинарные кавычки: 'language_term'. Если аргумент language_term указан как целое число, он представляет собой фактический код языка, идентифицирующий данный язык. Если аргумент language_term указан как шестнадцатеричное значение, он записывается как 0x, за которым следует шестнадцатеричное значение кода языка. Длина шестнадцатеричного значения не должна превышать восьми цифр, включая ведущие нули.
Если значение указано в двухбайтовой кодировке (DBCS), SQL Server преобразует его в Юникод.
Для указанного аргументом language_term языка должны быть включены ресурсы, такие как средства разбиения по словам и парадигматические модули. Если такие ресурсы не поддерживают указанный язык, SQL Server возвращает ошибку.
Для доступа к сведениям об установленном по умолчанию языке полнотекстового поиска экземпляра MicrosoftSQL Server используйте хранимую процедуру sp_configure. Дополнительные сведения см. в разделах sp_configure (Transact-SQL) и Параметр default full-text language.
Для столбцов с типами, отличными от BLOB и XML, содержащих текстовые данные на нескольких языках, или в случаях, когда язык хранящегося в столбце текста неизвестен, лучше использовать нейтральный (0x0) языковой ресурс. Однако следует осознавать возможные последствия использования нейтрального языкового ресурса (0x0). Информацию о возможных решениях и последствиях использования нейтрального языкового ресурса (0x0) см. в разделе Рекомендации по выбору языка при создании полнотекстового индекса.
Для документов, хранящихся в столбцах типов XML или BLOB, во время индексирования будет использоваться внутренняя языковая кодировка документа. Например, в XML-столбцах атрибут xml:lang в XML-документах будет идентифицировать язык. Во время запроса значение, ранее указанное для аргумента language_term, становится используемым по умолчанию языком в полнотекстовых индексах, если аргумент language_term не указан как часть полнотекстового запроса.
KEY INDEX index_name
Имя индекса уникальных ключей таблицы table_name. Индекс KEY INDEX должен быть уникальным столбцом с одним ключом, не допускающим значения NULL. Выбрать минимально возможный индекс ключа для полнотекстового уникального ключа. Для оптимальной производительности рекомендуется использовать для полнотекстовых ключей тип данных integer.fulltext_catalog_name
Полнотекстовый каталог, используемый для полнотекстового индекса. Этот каталог уже должен существовать в базе данных. Это предложение является необязательным. Если оно не указано, используется каталог по умолчанию. Если каталога по умолчанию не существует, SQL Server возвращает ошибку.FILEGROUP filegroup_name
Создает указанный полнотекстовый индекс в указанной файловой группе. Файловая группа должна существовать. Если предложение FILEGROUP не задано, полнотекстовый индекс помещается для несекционированной таблицы в ту же файловую группу, что и базовая таблица и представление, для секционированной таблицы — в первичную файловую группу.CHANGE_TRACKING [ = ] { MANUAL | AUTO | OFF [ , NO POPULATION ] }
Указывает, будет ли SQL Server распространять на полнотекстовый индекс изменения (обновления, удаления или вставки), выполненные в столбцах таблицы, которые включены в полнотекстовый индекс. Изменения данных, внесенные с помощью инструкций WRITETEXT и UPDATETEXT, не отражаются в полнотекстовом индексе и не отмечаются при отслеживании изменений.MANUAL
Указывает, что отслеживаемые изменения должны распространяться вручную путем вызова инструкции Transact-SQL ALTER FULLTEXT INDEX … START UPDATE POPULATION (заполнение вручную). Агент SQL Server можно использовать для периодического вызова инструкции Transact-SQL.AUTO
Указывает, что отслеживаемые изменения будут распространяться автоматически в ходе изменения данных в базовой таблице (автоматическое заполнение). Изменения могут распространяться автоматически, однако это не значит, что они будут немедленно отражаться в полнотекстовом индексе. Значение AUTO используется по умолчанию.OFF [ , NO POPULATION]
Указывает, что в SQL Server не хранится список изменений индексированных данных. Если аргумент NO POPULATION не указан, SQL Server заполняет индекс полностью, после того как он был создан.Аргумент NO POPULATION может использоваться только в том случае, если аргументу CHANGE_TRACKING присвоено значение OFF. Если указан аргумент NO POPULATION, SQL Server не заполняет индекс после его создания. Индекс заполняется только после выполнения пользователем команды ALTER FULLTEXT INDEX с предложением START FULL POPULATION или START INCREMENTAL POPULATION.
STOPLIST [ = ] { OFF | SYSTEM | stoplist_name }
Связывает полнотекстовый список стоп-слов с индексом. Индекс не заполняется маркерами, которые являются частью указанного списка стоп-слов. Если список STOPLIST не указан, SQL Server связывает с индексом системный полнотекстовый список стоп-слов.OFF
Указывает, что с полнотекстовым индексом не связан ни один из списков стоп-слов.SYSTEM
Указывает, что для полнотекстового индекса должен использоваться системный полнотекстовый список стоп-слов.stoplist_name
Задает имя списка стоп-слов, который будет связан с полнотекстовым индексом.
Замечания
Дополнительные сведения о полнотекстовых индексах см. в разделе Настройка полнотекстовых каталогов и индексов для базы данных.
Для столбцов xml можно создать полнотекстовый индекс, который индексирует содержимое XML-элементов, но пропускает XML-разметку. К значениям атрибута, если они не являются числовыми, применяется полнотекстовый индекс. Теги элементов используются в качестве границ лексем. Поддерживаются XML-документы и HTML-документы, а также фрагменты правильного формата, содержащие несколько языков. Дополнительные сведения см. в разделе Полнотекстовый индекс XML-столбца.
Рекомендуется для ключевого столбца индекса использовать тип данных integer. Это позволяет проводить оптимизацию во время выполнения запроса.
Взаимодействие между отслеживанием изменений и параметром NO POPULATION
Заполнение полнотекстового индекса зависит от того, включено ли отслеживание изменений и указано ли предложение WITH NO POPULATION в инструкции ALTER FULLTEXT INDEX. В следующей таблице описывается результат их взаимодействия.
Отслеживание изменений |
WITH NO POPULATION |
Результат |
---|---|---|
Не включено |
Не указано |
Выполняется полное заполнение полнотекстового индекса. |
Не включено |
Указано |
Заполнение полнотекстового индекса не выполняется, если не выполнена инструкция ALTER FULLTEXT INDEX...START POPULATION. |
Включено |
Указано |
Формируется ошибка. Индекс не изменяется. |
Включено |
Не указано |
Выполняется полное заполнение полнотекстового индекса. |
Дополнительные сведения о заполнении полнотекстовых индексов см. в разделе Заполнение полнотекстового индекса.
Разрешения
Пользователь должен обладать разрешением REFERENCES на полнотекстовый каталог и разрешением ALTER на таблицу или индексированное представление, либо являться членом предопределенной роли сервера sysadmin или предопределенных ролей базы данных db_owner или db_ddladmin.
Если указана инструкция SET STOPLIST, пользователь должен иметь разрешение REFERENCES на указанный список стоп-слов. Это разрешение может быть предоставлено владельцем списка стоп-слов.
Примечание |
---|
Любому пользователю предоставлено разрешение REFERENCE на список стоп-слов по умолчанию, поставляемый в составе SQL Server. |
Примеры
А. Создание уникального индекса, полнотекстового каталога, а также полнотекстового индекса
В следующем примере создается уникальный индекс по столбцу JobCandidateID таблицы HumanResources.JobCandidate образца базы данных AdventureWorks. Затем пример создает полнотекстовый каталог по умолчанию, ft. Наконец, пример создает полнотекстовый индекс по столбцу Resume с использованием каталога ft и системного списка стоп-слов.
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 STOPLIST = SYSTEM;
GO
Б. Создание полнотекстового индекса для нескольких столбцов таблицы
В следующем примере создается полнотекстовый индекс по столбцам ReviewerName, EmailAddress и Comments таблицы Production.ProductReview образца базы данных AdventureWorks. Для каждого столбца в примере указывается код (LCID) английского языка, 1033, который является языком данных в столбцах. Этот полнотекстовый индекс использует полнотекстовый каталог по умолчанию и существующий индекс уникального ключа, PK_ProductReview_ProductReviewID. Согласно рекомендациям, этот ключ индекса находится в целочисленном столбце ProductReviewID.
USE AdventureWorks;
GO
CREATE FULLTEXT INDEX ON Production.ProductReview
(
ReviewerName
Language 1033,
EmailAddress
Language 1033,
Comments
Language 1033
)
KEY INDEX PK_ProductReview_ProductReviewID ;
GO
В. Создание полнотекстового индекса без заполнения
В следующем примере создается полнотекстовый каталог, documents_catalog, в образце базы данных AdventureWorks. Следующий пример создает полнотекстовый индекс, который использует этот новый каталог. Полнотекстовый индекс построен для столбца Document таблицы Production.Document. Для каждого столбца указывается код (LCID) английского языка, 1033, который является языком данных в столбце. Этот полнотекстовый индекс использует полнотекстовый каталог по умолчанию и существующий индекс уникального ключа, PK_Document_DocumentID. Согласно рекомендациям, этот ключ индекса находится в целочисленном столбце DocumentID. В примере указано, что отслеживание изменений отключено (без заполнения). Позже, в часы с наименьшей загрузкой, пример использует инструкцию ALTER FULLTEXT INDEX для запуска полного заполнения нового индекса и включения автоматического отслеживания изменений.
USE AdventureWorks;
GO
CREATE FULLTEXT CATALOG documents_catalog;
GO
CREATE FULLTEXT INDEX ON Production.Document
( Document
TYPE COLUMN FileExtension
Language 1033 )
KEY INDEX PK_Document_DocumentID
ON documents_catalog
WITH CHANGE_TRACKING OFF, NO POPULATION;
GO
-- Позже, в часы с наименьшей загрузкой, выполняется заполнение индекса:
ALTER FULLTEXT INDEX ON Production.Document SET CHANGE_TRACKING AUTO;
GO
Журнал изменений
Обновления |
---|
Добавлены примеры в раздел «Примеры». |
Добавлен раздел «Взаимодействие между отслеживанием изменений и параметром NO POPULATION». |
См. также