CREATE FULLTEXT INDEX (Transact-SQL)
Создает полнотекстовый индекс по таблице или индексированному представлению в базе данных. Для таблицы или индексированного представления допускается только один полнотекстовый индекс, а каждый полнотекстовый индекс применяется только к одной таблице или индексированному представлению.
Полнотекстовый индекс может содержать не более 1024 столбцов.
Синтаксические обозначения в Transact-SQL
Синтаксис
CREATE FULLTEXT INDEX ON table_name
[ ( { column_name
[ TYPE COLUMN type_column_name ]
[ LANGUAGE language_term ]
[ STATISTICAL_SEMANTICS ]
} [ ,...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 }
| SEARCH PROPERTY LIST [ = ] property_list_name
}
Аргументы
table_name
Имя таблицы или индексированного представления, содержащего столбец или столбцы, включенные в полнотекстовый индекс.column_name
Имя столбца, включенного в полнотекстовый индекс. Индексировать для полнотекстового поиска можно только столбцы типов char, varchar, nchar, nvarchar, text, ntext, image, xml и varbinary(max). Чтобы задать несколько столбцов, предложение column_name повторяется следующим образом:CREATE FULLTEXT INDEX ON table_name (column_name1 […], column_name2 […]) …
TYPE COLUMN type_column_name
Указывает имя столбца таблицы type_column_name, в котором хранится тип документа для документа varbinary(max) или image. Этот столбец называется столбцом типа и содержит указываемое пользователем расширение файла (.DOC, .PDF, .XLS и т. д.). Столбец типа должен иметь тип char, nchar, varchar или nvarchar.Указывайте TYPE COLUMN type_column_name только в том случае, если параметр column_name задан для столбца 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 возвращает ошибку.
Для доступа к данным о языке полнотекстового поиска по умолчанию экземпляра Microsoft SQL Server следует использовать хранимую процедуру sp_configure. Дополнительные сведения см. в разделе sp_configure (Transact-SQL).
Для столбцов с типами, отличными от BLOB и XML, содержащих текстовые данные на нескольких языках, или в случаях, когда язык хранящегося в столбце текста неизвестен, лучше использовать нейтральный (0x0) языковой ресурс. Однако следует осознавать возможные последствия использования нейтрального языкового ресурса (0x0). Информацию о возможных решениях и последствиях использования нейтрального языкового ресурса (0x0) см. в разделе Выбор языка при создании полнотекстового индекса.
Для документов, хранящихся в столбцах типов XML или BLOB, во время индексирования будет использоваться внутренняя языковая кодировка документа. Например, в XML-столбцах атрибут xml:lang в XML-документах будет идентифицировать язык. Во время запроса значение, ранее указанное для аргумента language_term, становится используемым по умолчанию языком в полнотекстовых индексах, если аргумент language_term не указан как часть полнотекстового запроса.
STATISTICAL_SEMANTICS
Создает дополнительные индексы ключевых фраз и подобия документов, которые являются частью статистического семантического индексирования. Дополнительные сведения см. в разделе Семантический поиск (SQL Server).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
Задает имя списка стоп-слов, который будет связан с полнотекстовым индексом.
SEARCH PROPERTY LIST [ = ] property_list_name
Связывает список свойств поиска с индексом.OFF
Указывает, что с полнотекстовым индексом не связан ни один список свойств.property_list_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
Б.Создание полнотекстового индекса для нескольких столбцов таблицы
В следующем примере создается полнотекстовый каталог, production_catalog, в образце базы данных AdventureWorks. Следующий пример создает полнотекстовый индекс, который использует этот новый каталог. Полнотекстовый поиск выполняется в столбцах ReviewerName, EmailAddress и Comments таблицы Production.ProductReview в образце базы данных AdventureWorks. Для каждого столбца в примере указывается код английского языка 1033, который является языком данных в столбцах. В этом полнотекстовом индексе используется существующий уникальный индекс ключа PK_ProductReview_ProductReviewID. Согласно рекомендациям, этот ключ индекса находится в целочисленном столбце ProductReviewID.
USE AdventureWorks;
GO
CREATE FULLTEXT CATALOG production_catalog;
GO
CREATE FULLTEXT INDEX ON Production.ProductReview
(
ReviewerName
Language 1033,
EmailAddress
Language 1033,
Comments
Language 1033
)
KEY INDEX PK_ProductReview_ProductReviewID
ON production_catalog;
GO
В.Создание полнотекстового индекса со списком свойств поиска без его заполнения
В следующем примере создается полнотекстовый индекс по столбцам Title, DocumentSummary и Document таблицы Production.Document. В примере для каждого столбца указан код для английского языка, 1033, который является языком данных в столбцах. Этот полнотекстовый индекс использует полнотекстовый каталог по умолчанию и существующий индекс уникального ключа — PK_Document_DocumentID. Согласно рекомендациям, этот ключ индекса находится в целочисленном столбце DocumentID.
В примере указывается системный список стоп-слов. Кроме того, задается список свойств поиска DocumentPropertyList. Пример создания такого списка свойств см. в разделе CREATE SEARCH PROPERTY LIST (Transact-SQL).
В примере указано, что отслеживание изменений отключено (без заполнения). Позже, в часы с наименьшей загрузкой, будет запущено полное заполнение нового индекса и включено автоматическое отслеживание изменений с помощью инструкции ALTER FULLTEXT INDEX.
USE AdventureWorks;
GO
CREATE FULLTEXT INDEX ON Production.Document
(
Title
Language 1033,
DocumentSummary
Language 1033,
Document
TYPE COLUMN FileExtension
Language 1033
)
KEY INDEX PK_Document_DocumentID
WITH STOPLIST = SYSTEM, SEARCH PROPERTY LIST = DocumentPropertyList, CHANGE_TRACKING OFF, NO POPULATION;
GO
Позже, в часы с наименьшей загрузкой, выполняется заполнение индекса:
ALTER FULLTEXT INDEX ON Production.Document SET CHANGE_TRACKING AUTO;
GO
См. также
Справочник
ALTER FULLTEXT INDEX (Transact-SQL)
DROP FULLTEXT INDEX (Transact-SQL)
Инструкция GRANT (Transact-SQL)
sys.fulltext_indexes (Transact-SQL)
Основные понятия
Создание и управление полнотекстовыми индексами
Компонент Full-Text Search (SQL Server)
Поиск свойств документа с использованием списков свойств поиска