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


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

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

При выполнении статистического семантического поиска используются индексы, полученные при полнотекстовом поиске, а также создаются дополнительные индексы. Из-за этой зависимости от полнотекстового поиска приходится создавать при определении нового или изменении существующего полнотекстового индекса новый семантический индекс. Вы можете создать новый семантический индекс с помощью инструкций Transact-SQL или с помощью мастера полнотекстового индексирования и других диалоговых окон среды Среда 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 1049
            Statistical_Semantics
        ) 
        KEY INDEX JobCandidateID 
        WITH STOPLIST = SYSTEM
    GO
    

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

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

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

    CREATE FULLTEXT CATALOG documents_catalog
    GO
    
    CREATE FULLTEXT INDEX ON Production.Document
        ( 
        Title
            Language 1049, 
        DocumentSummary
            Language 1049, 
        Document 
            TYPE COLUMN FileExtension
            Language 1049
            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 COLUMN имя_столбца DROP STATISTICAL_SEMANTICS. С помощью одной инструкции ALTER можно удалить индексирование из нескольких столбцов.

      USE database_name
      GO
      
      ALTER FULLTEXT INDEX
          ALTER COLUMN column_name
          DROP STATISTICAL_SEMANTICS
      GO
      
    • Для удаления семантического и полнотекстового индексирования из столбца вызовите инструкцию ALTER FULLTEXT INDEX с параметром ALTER COLUMN имя_столбца DROP STATISTICAL_SEMANTICS.

      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), упорядоченные по коду языка.

Язык

Код языка

Немецкий

1031

Английский (США)

1033

Французский

1036

Итальянский

1040

Португальский (Бразилия)

1046

Русский

1049

Шведский

1053

Английский (Великобритания)

2057

Португальский (Португалия)

2070

Испанский

3082

[В начало]

Как определить, какие типы документов могут быть проиндексированы

Выполнение запроса к представлению каталога sys.fulltext_document_types (Transact-SQL).

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

[В начало]

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

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

[В НАЧАЛО]

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

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

[В начало]