Создание полнотекстовых индексов и управление ими

Область применения: SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure

В этой статье описывается, как создавать, заполнять и управлять полнотекстовыми индексами в SQL Server Database Engine. Полнотекстовый индекс поддерживает поиск по ключевым словам и лингвистический поиск по символьным столбцам таблицы.

Создание полнотекстового каталога

Прежде чем создать полнотекстовый индекс, вам нужен полнотекстовый каталог. Каталог — это виртуальный контейнер для одного или нескольких полнотекстовых индексов. Для получения дополнительной информации смотрите раздел «Создание и управление Full-Text каталогами».

Создание, изменение или удаление полнотекстового индекса

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

Процесс создания и поддержания полнотекстового индекса называется заполнением (а также сканированием). Существует три типа заполнения полнотекстового индекса:

  • полная популяция
  • Популяция на основе учёта изменений
  • Инкрементное население на основе временной метки.

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

Просмотр свойств полнотекстового индекса

Просмотр свойств полнотекстового индекса с помощью Transact-SQL

Каталог или динамическое управленческое представление Описание
sys.fulltext_index_catalog_usages Возвращает строку для каждой связи между полнотекстовым каталогом и полнотекстовым индексом.
sys.fulltext_index_columns Содержит по одной строке для каждого столбца, являющегося частью полнотекстового индекса.
sys.fulltext_index_fragments Полнотекстовый индекс использует внутренние таблицы, называемые полнотекстовыми индексными фрагментами, для хранения инвертированных индексных данных. Вы можете использовать этот вид для запроса метаданных об этих фрагментах. Представление содержит строку для каждого фрагмента полнотекстового индекса в каждой таблице, содержащей полнотекстовый индекс.
sys.fulltext_indexes Содержит по одной строке для каждого полнотекстового индекса табличного объекта.
sys.dm_fts_index_keywords Возвращает сведения о содержимом полнотекстового индекса для указанной таблицы.
sys.dm_fts_index_keywords_by_document Возвращает сведения о содержимом полнотекстового индекса на уровне документа для указанной таблицы. Данное ключевое слово может встречаться в нескольких документах.
sys.dm_fts_index_population Возвращает сведения о выполняющихся в настоящий момент процессах заполнения полнотекстовых индексов.

Просмотр свойств полнотекстового индекса с помощью SQL Server Management Studio

Примечание.

Чтобы просмотреть свойства полнотекстовых индексов для баз данных SQL Azure, используйте Transact-SQL.

  1. В SQL Server Management Studio в Обозревателе объектов разверните сервер.

  2. Разверните Базы данных, а затем базу данных, содержащую полнотекстовый индекс.

  3. Разверните Таблицы.

  4. Щелкните правой кнопкой мыши таблицу, в которой определен полнотекстовый индекс, выберите полнотекстовый индекс и в контекстном меню полнотекстового индекса выберите "Свойства". Это действие открывает диалоговое окно «Свойства индекса полного текста ».

  5. В панели «Выбрать страницу » выберите любую из следующих страниц:

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

    Список исключений полнотекстового индекса

    Полнотекстовое индексирование включено.

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

    Поиск в списке свойств.
    Число столбцов Отображаются столбцы таблицы, доступные для полнотекстового индексирования. Выбранные столбцы включаются в полнотекстовый индекс. Можно выбрать столько доступных столбцов, сколько нужно включить в полнотекстовый индекс. Дополнительные сведения см. в разделе Заполнение полнотекстовых индексов.
    Расписания Эта страница используется для создания расписаний задания агента SQL Server, которое запускает добавочное заполнение таблицы для заполнения полнотекстового индекса или для управления такими расписаниями. Дополнительные сведения см. в разделе Заполнение полнотекстовых индексов.

    Примечание: после закрытия диалогового окна Свойства полнотекстового индекса любое вновь созданное расписание связывается с заданием агент SQL Server (Start Incremental Table Population on database_name.table_name).
  6. Нажмите кнопку "ОК", чтобы сохранить изменения и выйти из диалогового окна "Свойства полнотекстового индекса".

Просмотр свойств индексированных таблиц и столбцов

Вы можете использовать несколько Transact-SQL функций, например OBJECTPROPERTYEX, чтобы получить значение различных полнотекстовых свойств индексирования. Эти сведения полезны для администрирования и устранения нарушений в работе средств полнотекстового поиска.

В следующей таблице перечислены полнотекстовые свойства, связанные с индексированных таблицами и столбцами и связанными с ними функциями Transact-SQL.

Свойство Описание Функция
FullTextTypeColumn TYPE COLUMN в таблице, содержащей информацию о типе документа для столбца. COLUMNPROPERTY
IsFulltextIndexed Указывает, включен ли столбец для индексации полного текста. COLUMNPROPERTY
IsFulltextKey Указывает, является ли индекс полнотекстовым ключом таблицы. INDEXPROPERTY
ТаблицаПолнотекстовоеФоновоеОбновлениеИндексаВкл Указывает, имеется ли в таблице полнотекстовое индексирование фоновых обновлений. OBJECTPROPERTYEX
TableFulltextCatalogId Идентификатор полнотекстового каталога, где находятся данные полнотекстового индекса таблицы. OBJECTPROPERTYEX
TableFulltextChangeTrackingOn Указывает, включено ли в таблице полнотекстовое отслеживание изменений. OBJECTPROPERTYEX
TableFulltextDocsProcessed Количество строк, обработанных с начала полнотекстового индексирования. OBJECTPROPERTYEX
TableFulltextFailCount Число строк, которые полнотекстовый поиск не проиндексировал. OBJECTPROPERTYEX
TableFulltextItemCount Количество строк, для которых было успешно выполнено полнотекстовое индексирование. OBJECTPROPERTYEX
TableFulltextKeyColumn Идентификатор столбца полнотекстового уникального ключевого столбца. OBJECTPROPERTYEX
TableFullTextMergeStatus Является ли таблица с полнотекстовым индексом в процессе слияния в настоящий момент. OBJECTPROPERTYEX
TableFulltextPendingChanges Количество записей отслеживания изменений, ожидающих обработки. OBJECTPROPERTYEX
СтатусЗаполненияПолнотекстовойТаблицы Указывает состояние заполнения полнотекстовой таблицы. OBJECTPROPERTYEX
ТаблицаИмеетАктивныйПолнотекстовыйИндекс Указывает, содержит ли таблица активный полнотекстовый индекс. OBJECTPROPERTYEX

Узнать сведения о полнотекстовом ключевом столбце

Обычно вы объединяете результат функций CONTAINSTABLE или FREETEXTTABLE, возвращающих набор строк, с базовой таблицей. В таких случаях необходимо знать уникальное имя ключевого столбца. Вы можете проверить, используется ли заданный уникальный индекс в качестве полнотекстового ключа, и получить идентификатор столбца полного текста.

Определение использования данного уникального индекса в качестве полнотекстового ключевого столбца

Вызовите функцию INDEXPROPERTY с помощью инструкции SELECT . В вызове OBJECT_ID функции используйте эту функцию для преобразования имени таблицы (table_name) в идентификатор таблицы, указания имени уникального индекса для таблицы и указания свойства индекса IsFulltextKey , следующим образом:

SELECT INDEXPROPERTY(OBJECT_ID('table_name'), 'index_name', 'IsFulltextKey');

Этот оператор возвращает 1, если индекс обеспечивает уникальность для столбца полнотекстового ключа, и 0, если это не так.

Пример

В следующем примере проверяется, обеспечивает ли индекс PK_Document_DocumentNode уникальность столбца полнотекстового ключа:

USE AdventureWorks2025;
GO

SELECT INDEXPROPERTY(OBJECT_ID('Production.Document'), 'PK_Document_DocumentNode', 'IsFulltextKey');

Этот пример возвращает 1, если PK_Document_DocumentNode индекс обеспечивает уникальность для полного текста ключевого столбца. В противном случае он возвращает 0 или NULL. NULL Означает, что вы используете некорректное имя индекса, имя индекса не соответствует таблице, таблицы не существует и так далее.

Найдите идентификатор столбца полнотекстового ключа

Каждая полнотекстовая включённая таблица имеет столбец, который требует уникальных строк для таблицы ( уникальный столбец ключей). Свойство TableFulltextKeyColumn, полученное с помощью функции OBJECTPROPERTYEX, содержит идентификатор столбца уникального ключа.

Чтобы получить этот идентификатор, используйте оператор SELECT, который вызывает функцию OBJECTPROPERTYEX. Используйте OBJECT_ID функцию для преобразования имени таблицы (table_name) в идентификатор таблицы и указания TableFulltextKeyColumn свойства следующим образом:

SELECT OBJECTPROPERTYEX(OBJECT_ID('table_name'), 'TableFulltextKeyColumn') AS 'Column Identifier';

Примеры

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

USE AdventureWorks2025;
GO

SELECT OBJECTPROPERTYEX(OBJECT_ID('Production.Document'), 'TableFulltextKeyColumn');
GO

В следующем примере показано, как использовать идентификатор уникального столбца ключа для получения названия столбца.

USE AdventureWorks2025;
GO

DECLARE @key_column AS SYSNAME;

SET @key_column = COL_NAME(
    OBJECT_ID('Production.Document'),
    OBJECTPROPERTYEX(OBJECT_ID('Production.Document'), 'TableFulltextKeyColumn')
);

SELECT @key_column AS 'Unique Key Column';
GO

В этом примере возвращается столбец результирующего набора с именем Unique Key Column, в котором отображается одна строка с именем уникального ключевого столбца таблицы Document, DocumentNode. Если в этом запросе было некорректное имя индекса, имя индекса не соответствует таблице, таблицы не существовало и так далее, он возвращает NULL.

Столбцы varbinary(max) и XML

Если вы индексируете полный текст столбец varbinary(max), varbinary или xml , вы можете задавать запросы, используя полнотекстовые предикаты (CONTAINS и FREETEXT) и функции (CONTAINSTABLE и FREETEXTTABLE), как и любой другой полный индексируемый столбец.

Индексирование данных типа varbinary(max) или varbinary

В одном столбце типа varbinary(max) или varbinary могут храниться документы различных типов. ядро СУБД поддерживает любой тип документа, для которого фильтр установлен и доступен в операционной системе. Тип каждого документа определяется по расширению имени файла этого документа. Например, для .doc расширения файла полнотекстовый поиск использует фильтр, поддерживающий документы Microsoft Word. Чтобы получить список доступных типов документов, выполните запрос к представлению каталога sys.fulltext_document_types .

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

EXECUTE sp_fulltext_service
    @action = 'load_os_resources',
    @value = 1;

Чтобы создать полнотекстовый индекс для столбца типа varbinary(max) , средству полнотекстового поиска требуется доступ к расширениям файлов документов в столбце типа varbinary(max) . Эту информацию необходимо хранить в столбце таблицы, называемом столбцем типа и который вы связываете с varbinary(max) столбцем в полном текстовом индексе. Во время индексирования документа средство полнотекстового поиска по расширению файла в столбце типа определяет, какой фильтр следует использовать.

Индексирование XML-данных

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

Для получения дополнительной информации об индексации и запросах к XML-столбцу см. раздел «Использовать полнотекстовый поиск с XML-столбцами».

Отключение или повторное включение полнотекстового индексирования для таблицы

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

В таблице с индексом полного текста можно вручную отключить или повторно включить таблицу для индексации полного текста, используя SQL Server Management Studio.

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

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

  3. Выберите полнотекстовый индекс и выберите "Отключить полнотекстовый индекс" или "Включить полнотекстовый индекс".

Удаление полнотекстового индекса из таблицы

  1. В обозревателе объектов щелкните правой кнопкой мыши таблицу, содержащую полнотекстовый индекс, который необходимо удалить.

  2. Выберите Удалить полнотекстовый индекс.

  3. При появлении запроса нажмите кнопку "ОК ", чтобы подтвердить удаление полнотекстового индекса.