Включение семантического поиска по таблицам и столбцам
Область применения: 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
. Следующий пример создает полнотекстовый индекс, который использует этот новый каталог. Полнотекстовый индекс создается на Title
DocumentSummary
столбцах 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, обозначающего русский язык. В этом случае результаты никогда не возвращаются из семантических индексов в этом столбце.