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


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

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

В этой статье описывается создание, заполнение и управление полнотекстовых индексов в SQL Server.

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

Необходимо создать полнотекстовый каталог, прежде чем создавать полнотекстовый индекс. Каталог — это виртуальный контейнер для одного или нескольких полнотекстовых индексов. Дополнительные сведения см. в статье Создание полнотекстовых каталогов и управление ими.

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

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

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

  • полное заполнение;
  • Заполнение на основе отслеживания изменений
  • добавочное заполнение с использованием отметки времени.

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

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

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

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

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

Примечание.

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

  1. В СРЕДЕ SQL Server Management Studio в обозреватель объектов разверните сервер.

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

  3. Раскройте узел Таблицы.

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

  5. На панели Выбор страницы можно выбрать любую из приведенных ниже страниц.

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

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

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

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

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

    Примечание. После выхода из диалогового окна Свойства полнотекстового индекса любое вновь созданное расписание сопоставляется с заданием агента SQL Server (запуск добавочного заполнения таблицы в имя_базы_данных.имя_таблицы).
  6. Нажмите кнопку "ОК", чтобы сохранить изменения и выйти из диалогового окна "Свойства полнотекстового индекса".

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

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

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

Свойство Description Function
FullTextTypeColumn TYPE COLUMN в таблице, которая содержит информацию о типе документа столбца. COLUMNPROPERTY
IsFulltextIndexed Указывает, включено ли в столбце полнотекстовое индексирование. COLUMNPROPERTY
IsFulltextKey Указывает, является ли индекс полнотекстовым ключом таблицы. INDEXPROPERTY
TableFulltextBackgroundUpdateIndexOn Указывает, имеется ли в таблице фоновое полнотекстовое индексирование обновлений. OBJECTPROPERTYEX
TableFulltextCatalogId Идентификатор полнотекстового каталога, где находятся данные полнотекстового индекса таблицы. OBJECTPROPERTYEX
TableFulltextChangeTrackingOn Указывает, включено ли в таблице полнотекстовое отслеживание изменений. OBJECTPROPERTYEX
TableFulltextDocsProcessed Количество строк, обработанных с начала полнотекстового индексирования. OBJECTPROPERTYEX
TableFulltextFailCount Число строк полнотекстового поиска не индексирует. OBJECTPROPERTYEX
TableFulltextItemCount Количество строк, для которых было успешно выполнено полнотекстовое индексирование. OBJECTPROPERTYEX
TableFulltextKeyColumn Идентификатор столбца полнотекстового уникального ключевого столбца. OBJECTPROPERTYEX
TableFullTextMergeStatus Определяет, участвует ли в настоящий момент полнотекстовый индекс для таблицы в процессе слияния. OBJECTPROPERTYEX
TableFulltextPendingChanges Количество ожидающих отслеженных изменений к обработке. OBJECTPROPERTYEX
TableFulltextPopulateStatus Указывает состояние заполнения полнотекстовой таблицы. OBJECTPROPERTYEX
TableHasActiveFulltextIndex Указывает, содержит ли таблица активный полнотекстовый индекс. 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 AdventureWorks2022;
GO
SELECT INDEXPROPERTY(OBJECT_ID('Production.Document'), 'PK_Document_DocumentNode',  'IsFulltextKey');

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

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

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

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

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

Примеры

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

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

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

USE AdventureWorks2022;
GO

DECLARE @key_column 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 могут храниться документы различных типов. SQL Server поддерживает любой тип документа, для которого установлен фильтр и доступен в операционной системе. Тип каждого документа определяется по расширению имени файла этого документа. Например, при работе с DOC-файлом при полнотекстовом поиске будет использоваться фильтр, который поддерживает документы Microsoft Word. Чтобы получить список доступных типов документов, выполните запрос к представлению каталога sys.fulltext_document_types .

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

EXEC 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 все созданные пользователем базы данных по умолчанию включены в полнотекстовый режим. Кроме того, отдельная таблица автоматически включается для полнотекстового индексирования, как только для нее создается полнотекстовый индекс, и в этот индекс добавляется столбец. Таблица автоматически выключается для полнотекстового индексирования, как только из ее полнотекстового индекса удаляется последний столбец.

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

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

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

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

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

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

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

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

Следующие шаги