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


Включение семантического поиска по таблицам и столбцам

Область применения: SQL Server

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

Статистический семантический поиск использует индексы, созданные полнотекстовым поиском, и создает дополнительные индексы. Из-за этой зависимости от полнотекстового поиска приходится создавать при определении нового или изменении существующего полнотекстового индекса новый семантический индекс. Вы можете создать новый семантический индекс с помощью инструкций Transact-SQL или с помощью мастера полнотекстового индексирования и других диалоговых окон в SQL Server Management Studio, как описано в этой статье.

Создание семантического индекса

Требования и ограничения для создания семантического индекса

  • Можно создать индекс для любых объектов базы данных, поддерживаемых для полнотекстового индексирования, включая таблицы и индексированные представления.

  • Прежде чем можно будет включить семантическое индексирование для определенных столбцов, должны быть выполнены следующие предварительные условия:

    • Для базы данных должен существовать полнотекстовый каталог.

    • Таблица должна содержать полнотекстовый индекс.

    • Выбранные столбцы должны быть включены в полнотекстовый индекс.

    Можно создать и включить эти требования одновременно.

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

  • Для столбцов типа varbinary(max) можно указать любой тип документа, в котором поддерживается полнотекстовое индексирование. Дополнительные сведения см. в разделе "Практическое руководство. Определение типов документов, которые можно индексировать в этой статье".

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

  • Если явно не указать LCID для семантического индекса, то для семантического индексирования используются только первичный язык и связанная с ней статистика языка.

  • Если указать язык для столбца, для которого языковая модель недоступна, создание индекса завершается ошибкой и возвращает сообщение об ошибке.

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

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

Создание нового семантического индекса с помощью Transact-SQL

Вызовите инструкцию CREATE FULLTEXT INDEX и укажите STATISTICAL_SEMANTICS для каждого столбца, на котором необходимо создать семантический индекс. Дополнительные сведения обо всех параметрах этой инструкции см. в статье CREATE FULLTEXT INDEX (Transact-SQL).

Пример 1. Создание уникального индекса, полнотекстового и семантического индекса

В следующем примере создается полнотекстовый каталог ftпо умолчанию. Затем в примере создается уникальный индекс JobCandidateID в столбце HumanResources.JobCandidate таблицы AdventureWorks2022 образца базы данных. Данный уникальный индекс используется в качестве ключевого столбца полнотекстового индекса. Затем в примере создается полнотекстовый индекс и семантический индекс столбца Resume .

CREATE FULLTEXT CATALOG ft AS DEFAULT
GO

CREATE UNIQUE INDEX ui_ukJobCand
    ON HumanResources.JobCandidate(JobCandidateID)
GO

CREATE FULLTEXT INDEX ON HumanResources.JobCandidate
    (Resume
        Language 1033
        Statistical_Semantics
    )
    KEY INDEX JobCandidateID
    WITH STOPLIST = SYSTEM
GO

Пример 2. Создание полнотекстового и семантического индексов на нескольких столбцах с отложенным заполнением

В следующем примере создается полнотекстовый каталог, documents_catalog, в образце базы данных AdventureWorks2022. Следующий пример создает полнотекстовый индекс, который использует этот новый каталог. Полнотекстовый индекс создается на TitleDocumentSummaryстолбцах Production.Document таблицы, а Document семантический индекс создается только в столбцеDocument. Этот полнотекстовый индекс использует только что созданный полнотекстовый каталог и существующий уникальный ключевой индекс PK_Document_DocumentID. Как рекомендуется, этот ключ индекса создается в целочисленном столбце DocumentID. В примере указан код (LCID) для английского языка 1033, который является языком данных в столбцах.

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

CREATE FULLTEXT CATALOG documents_catalog
GO

CREATE FULLTEXT INDEX ON Production.Document
    (
    Title
        Language 1033,
    DocumentSummary
        Language 1033,
    Document
        TYPE COLUMN FileExtension
        Language 1033
        Statistical_Semantics
    )
    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

Создание нового семантического индекса с помощью среды SQL Server Management Studio

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

Создание семантического индекса при наличии существующего полнотекстового индекса

При изменении существующего полнотекстового индекса с ALTER FULLTEXT INDEX помощью инструкции можно добавить семантический индекс. Вы также можете добавить семантический индексирование с помощью различных диалоговых окон в SQL Server Management Studio.

Добавление семантического индекса с помощью Transact-SQL

Вызовите инструкцию ALTER FULLTEXT INDEX с параметрами, описанными в следующем разделе, для каждого столбца, на котором требуется добавить семантический индекс. Дополнительные сведения обо всех параметрах этой инструкции см. в разделе ALTER FULLTEXT INDEX (Transact-SQL).

Полнотекстовые и семантические индексы повторяются после вызова ALTER, если не указано в противном случае.

  • Чтобы добавить полнотекстовое индексирование только в столбец, используйте ADD синтаксис.

  • Чтобы добавить полнотекстовый и семантический индексирование в столбец, используйте ADD синтаксис с параметром STATISTICAL_SEMANTICS .

  • Чтобы добавить семантический индексирование в столбец, который уже включен для полнотекстового индексирования, используйте ADD STATISTICAL_SEMANTICS этот параметр. Можно добавить только семантический индексирование в один столбец в одной ALTER инструкции.

Пример. Добавление семантического индексирования в столбец, в котором уже есть полнотекстовое индексирование

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

ALTER FULLTEXT INDEX ON Production.Document
    ALTER COLUMN Document
        ADD Statistical_Semantics
    WITH NO POPULATION
GO

Добавить семантический индекс с помощью среды SQL Server Management Studio

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

Изменение семантического индекса

Требования и ограничения для изменения существующего индекса

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

  • Невозможно добавить индексирование в столбец и изменить или удалить индексирование для одного столбца в одном вызове инструкции ALTER FULLTEXT INDEX .

Удаление семантического индекса

При изменении существующего полнотекстового индекса с ALTER FULLTEXT INDEX помощью инструкции можно удалить семантический индекс. Вы также можете удалить семантический индексирование с помощью различных диалоговых окон в SQL Server Management Studio.

Удалите семантический индекс с помощью Transact-SQL

Чтобы удалить семантический индексирование только из столбца или столбцов, вызовите ALTER FULLTEXT INDEX инструкцию с параметром ALTER COLUMN <column_name> DROP STATISTICAL_SEMANTICS . Индексирование можно удалить из нескольких столбцов в одной ALTER инструкции.

USE database_name;
GO

ALTER FULLTEXT INDEX
    ALTER COLUMN column_name
    DROP STATISTICAL_SEMANTICS;
GO

Чтобы удалить полнотекстовый и семантический индексирование из столбца, вызовите ALTER FULLTEXT INDEX инструкцию с параметром ALTER COLUMN <column_name> DROP .

USE database_name;
GO

ALTER FULLTEXT INDEX
    ALTER COLUMN column_name
    DROP;
GO

Удаление семантического индекса с помощью SQL Server Management Studio

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

Требования и ограничения для удаления семантического индекса

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

  • Невозможно указать NO POPULATION параметр при удалении семантического индексирования из последнего столбца в таблице, для которой была включена семантическое индексирование. Для удаления ранее индексированных результатов требуется цикл заполнения.

Проверка, включен ли семантический поиск по объектам базы данных

Включен ли семантический поиск для базы данных?

IsFullTextEnabled Запросите свойство функции метаданных DATABASEPROPERTYEX (Transact-SQL).

Возвращаемое значение 1 указывает, что полнотекстовый поиск и семантический поиск включены для базы данных. Возвращаемое значение 0 указывает, что они не включены.

SELECT DATABASEPROPERTYEX('database_name', 'IsFullTextEnabled');
GO

Включен ли семантический поиск для таблицы?

TableFullTextSemanticExtraction Запросите свойство функции метаданных OBJECTPROPERTYEX (Transact-SQL).

Возвращаемое значение 1 указывает, что семантический поиск включен для таблицы; Возвращаемое значение 0 указывает, что он не включен.

SELECT OBJECTPROPERTYEX(OBJECT_ID('table_name'), 'TableFullTextSemanticExtraction')
GO

Включен ли семантический поиск для столбца?

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

  • StatisticalSemantics Запросите свойство функции метаданных COLUMNPROPERTY (Transact-SQL).

    Возвращаемое значение 1 указывает, что семантический поиск включен для столбца; Возвращаемое значение 0 указывает, что он не включен.

    SELECT COLUMNPROPERTY(OBJECT_ID('table_name'), 'column_name', 'StatisticalSemantics');
    GO
    
  • Запрос представления каталога sys.fulltext_index_columns (Transact-SQL) для полнотекстового индекса.

    Значение 1 в statistical_semantics столбце указывает, что указанный столбец включен для семантического индексирования в дополнение к полнотекстовой индексации.

    SELECT * FROM sys.fulltext_index_columns
    WHERE object_id = OBJECT_ID('table_name');
    GO
    
  • В обозреватель объектов в Management Studio щелкните правой кнопкой мыши столбец и выберите "Свойства". На странице Общие диалогового окна Свойства столбца проверьте значение свойства Статистическая семантика .

    Значение True указывает, что для данного столбца, кроме полнотекстового индексирования, включено и семантическое индексирование.

Проверьте, какие языки поддерживаются для семантического поиска

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

Запросите представление каталога sys.fulltext_semantic_languages (Transact-SQL).

SELECT * FROM sys.fulltext_semantic_languages;
GO

Для семантического индексирования поддерживаются следующие языки. Этот список представляет выходные данные представления каталога sys.fulltext_semantic_languages (Transact-SQL), упорядоченные по LCID.

Язык LCID
Традиционный китайский 1028
Немецкий 1031
Английский (США) 1033
Французский 1036
Итальянский 1040
Бразильский 1046
русский 1049
Шведский 1053
Упрощенный китайский 2052
British English 2057
Португальский 2070
Китайский (Гонконг, САР, PRC) 2070
Испанский 3082
Chinese (Singapore) 4100
Chinese (Macao SAR) 5124

Примечание.

Если результаты пусты, необходимо скачать и установить базу данных статистики языка семантики. Дополнительные сведения см. в разделе "Установка, присоединение" и регистрация базы данных статистики языка семантики.

Определение типов документов, которые можно индексировать

Запрос представления каталога sys.fulltext_document_types (Transact-SQL).

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

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

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

Проблема. Поиск по конкретному столбцу не возвращает результатов

Возможно, для языка в Юникоде был указан код языка не в Юникоде.

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