Включение семантического поиска на таблицы и столбцы
Описывает способ включения или отключения статистического семантического индексирования в выбранных столбцах, содержащих документы или текст.
При выполнении статистического семантического поиска используются индексы, полученные при полнотекстовом поиске, а также создаются дополнительные индексы. Из-за этой зависимости от полнотекстового поиска приходится создавать при определении нового или изменении существующего полнотекстового индекса новый семантический индекс. Новый семантический индекс можно создать с помощью инструкций Transact-SQL или с помощью мастера индексирования Full-Text и других диалоговых окон в SQL Server Management Studio, как описано в этом разделе.
Создание семантического индекса
Требования и ограничения для создания семантического индекса
Можно создать индекс для любых объектов базы данных, поддерживаемых для полнотекстового индексирования, включая таблицы и индексированные представления.
Прежде чем можно будет включить семантическое индексирование для определенных столбцов, должны быть выполнены следующие предварительные условия:
Для базы данных должен существовать полнотекстовый каталог.
Таблица должна содержать полнотекстовый индекс.
Выбранные столбцы должны быть включены в полнотекстовый индекс.
Можно создать и включить эти требования одновременно.
Можно создать семантический индекс по столбцам с любым типом данных, поддерживаемым для полнотекстового индексирования. Дополнительные сведения см. в разделе Создание полнотекстовых индексов и управление ими.
Для столбцов типа
varbinary(max)
можно указать любой тип документа, поддерживаемый для полнотекстового индексирования. Дополнительные сведения см. в подразделе Практическое руководство. Определение того, какие типы документов могут быть проиндексированы этого раздела.При семантическом индексировании для выбранных столбцов создаются индексы двух типов — индекс ключевых фраз и индекс подобия документов. При включении семантического индексирования нельзя выбрать только один тип индекса из этих двух. Однако можно запрашивать эти индексы по отдельности. Дополнительные сведения см. в разделе Поиск ключевых фраз в документах с использованием семантического поиска и Поиск похожих и связанных документов с использованием семантического поиска.
Если код языка для семантического индекса не указан явно, при семантическом индексировании будет использоваться только основной язык и связанная с ним статистика.
В случае указания языка для столбца, для которого недоступна языковая модель, создание индекса завершится ошибкой и будет возвращено соответствующее сообщение.
Практическое руководство. Создание семантического индекса, если нет полнотекстового индекса
При создании нового полнотекстового индекса с помощью инструкции CREATE FULLTEXT INDEX семантическое индексирование на уровне столбца включается путем указания в определении столбца ключевого слова STATISTICAL_SEMANTICS . Семантическое индексирование также можно включить при создании полнотекстового индекса с помощью мастера полнотекстового индексирования.
Создание нового семантического индекса с помощью Transact-SQL
Вызовите инструкцию CREATE FULLTEXT INDEX и укажите параметр STATISTICAL_SEMANTICS для каждого столбца, на котором требуется создать семантический индекс. Дополнительные сведения обо всех параметрах этой инструкции см. в разделе CREATE FULLTEXT INDEX (Transact-SQL).
Пример 1. Создание уникального индекса, полнотекстового и семантического индекса
В следующем примере создается полнотекстовый каталог по умолчанию ft. Затем в примере создается уникальный индекс на столбце JobCandidateID таблицы HumanResources.JobCandidate образца базы данных AdventureWorks2012. Данный уникальный индекс используется в качестве ключевого столбца полнотекстового индекса. Затем в примере создается полнотекстовый и семантический индексы на столбце 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. Создание полнотекстового и семантического индексов на нескольких столбцах с отложенным заполнением
В следующем примере в образце базы данных AdventureWorks2012 создается полнотекстовый каталог documents_catalog. Следующий пример создает полнотекстовый индекс, который использует этот новый каталог. Полнотекстовый индекс создан на столбцах Title, DocumentSummaryи Document таблицы Production.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 из образца базы данных AdventureWorks2012. Пример добавляет семантический индекс для столбца 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 COLUMNcolumn_nameDROP STATISTICAL_SEMANTICS . С помощью одной инструкции ALTER можно удалить индексирование из нескольких столбцов.
```sql
USE database_name
GO
ALTER FULLTEXT INDEX
ALTER COLUMN column_name
DROP STATISTICAL_SEMANTICS
GO
```
Чтобы удалить полнотекстовое и семантическое индексирование из столбца, вызовите инструкцию ALTER FULLTEXT INDEX с параметром ALTER COLUMNcolumn_nameDROP .
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 |
---|---|
Немецкий | 1031 |
Английский (США) | 1033 |
Французский | 1036 |
Итальянский | 1040 |
Португальский (Бразилия) | 1046 |
русском языке | 1049 |
Шведский | 1053 |
Английский (Великобритания) | 2057 |
Португальский (Португалия) | 2070 |
Испанский | 3082 |
Практическое руководство. Определение того, какие типы документов могут быть проиндексированы
Запрос представления каталога sys.fulltext_document_types (Transact-SQL).
Если тип документа, который необходимо проиндексировать, отсутствует в списке поддерживаемых типов, то может потребоваться поиск, загрузка и установка дополнительных фильтров. Дополнительные сведения см. в статье Просмотр или изменение зарегистрированных фильтры и разделители слов.
Рекомендации. Создание отдельной файловой группы для полнотекстового и семантического индексов
Если выделение места на диске является серьезной проблемой, рассмотрите возможность создания отдельных файловых групп для полнотекстового и семантического индексов. Семантические индексы создаются в той же файловой группе, что и полнотекстовый индекс. Полностью заполненный семантический индекс может содержать большой объем данных.
Проблема. Поиск в определенных столбцах не возвращает результатов
Возможно, для языка в Юникоде был указан код языка не в Юникоде.
Имеется возможность включить семантическое индексирование на столбцах не в Юникоде с помощью кода языка, содержащего только слова в Юникоде, например кода 1049, обозначающего русский язык. В этом случае семантические индексы на этом столбце никогда не возвратят каких-либо результатов.