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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Практическое руководство. Создание семантического индекса при отсутствии Full-Text индекса

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

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

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

Вы можете добавить семантический индекс при изменении существующего полнотекстового индекса с помощью инструкции 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).

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

Рекомендуется создать отдельную файловую группу для Full-Text и семантических индексов.

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

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

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