Compartilhar via


Habilitar a pesquisa semântica em tabelas e colunas

Descreve como habilitar ou desabilitar a indexação semântica estatística em colunas selecionadas que contêm documentos ou texto.

A pesquisa semântica estatística usa os índices que são criados pela Pesquisa de Texto Completo e cria índices adicionais. Como resultado dessa dependência na pesquisa de texto completo, você cria um novo índice semântico ao definir um novo índice de texto completo ou ao alterar um índice de texto completo existente. Você pode criar um novo índice semântico usando instruções Transact-SQL ou usando o Assistente de Indexação de Full-Text e outras caixas de diálogo no SQL Server Management Studio, conforme descrito neste tópico.

Criando um índice semântico

Requisitos e restrições para criar um índice semântico

  • Você pode criar um índice em qualquer um dos objetos de banco de dados com suporte para indexação de texto completo, inclusive tabelas e exibições indexadas.

  • Antes de habilitar a indexação semântica para colunas específicas, verifique se existem os seguintes pré-requisitos:

    • Um catálogo de texto completo deve existir para o banco de dados.

    • A tabela deve ter um índice de texto completo.

    • As colunas selecionadas devem participar do índice de texto completo.

    É possível criar e habilitar todos esses requisitos ao mesmo tempo.

  • Você pode criar um índice semântico em colunas que tenham qualquer um dos tipos de dados com suporte para indexação de texto completo. Para obter mais informações, veja Criar e gerenciar índices de texto completo.

  • Você pode especificar qualquer tipo de documento com suporte para indexação de texto completo para colunas varbinary(max). Para obter mais informações, consulte Como determinar os tipos de documento que podem ser indexados neste tópico.

  • A indexação semântica cria dois tipos de índices para as colunas que você seleciona – um índice de frases-chave e um índice de similaridade de documento. Você não pode selecionar somente um tipo de índice ou o outro quando habilita a indexação semântica. Entretanto, você pode consultar esses dois índices separadamente. Para obter mais informações, veja Localizar frases-chave em documentos com a pesquisa semântica e Localizar documentos semelhantes e relacionados com a pesquisa semântica.

  • Se você não especificar explicitamente um LCID para um índice semântico, somente o idioma principal e suas estatísticas de idioma associadas serão usados para a indexação semântica.

  • Se você criar um idioma para uma coluna para a qual o modelo de idioma não está disponível, a criação do índice falhará e retornará uma mensagem de erro.

Como criar um índice semântico quando não existe índice de texto completo

Quando você criar um novo índice de texto completo com a instrução CREATE FULLTEXT INDEX , poderá habilitar a indexação semântica no nível de coluna especificando a palavra-chave STATISTICAL_SEMANTICS como parte da definição de coluna. Você também poderá habilitar a indexação semântica ao usar o Assistente para Indexação de Texto Completo para criar um novo índice de texto completo.

Criar um novo índice semântico usando Transact-SQL
Chame a instrução CREATE FULLTEXT INDEX e especifique STATISTICAL_SEMANTICS para cada coluna na qual você queira criar um índice semântico. Para obter mais informações sobre todas as opções dessa instrução, consulte CREATE FULLTEXT INDEX (Transact-SQL).

Exemplo 1: criar um índice exclusivo, um índice de texto completo e um índice semântico

O exemplo a seguir cria um catálogo de texto completo padrão, ft. O exemplo cria um índice exclusivo na coluna JobCandidateID da tabela HumanResources.JobCandidate do banco de dados de exemplo AdventureWorks2012. Este índice exclusivo é necessário como a coluna de chave de um índice de texto completo. O exemplo cria um índice de texto completo um índice semântico na coluna Retomar .

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  

Exemplo 2: criar um índice de texto completo e um índice semântico em várias colunas com população de índice atrasada

O exemplo a seguir cria um catálogo de texto completo, documents_catalog, no banco de dados de exemplo AdventureWorks2012. Em seguida, o exemplo cria um índice de texto completo que usa esse novo catálogo. O índice de texto completo criado nas colunas Title, DocumentSummarye Document da tabela Production.Document , enquanto o índice semântico está apenas na coluna Document . Esse índice de texto completo usa o catálogo de texto completo padrão e um índice de chave exclusiva existente, PK_Document_DocumentID. Conforme recomendado, essa chave de índice é criada em uma coluna de inteiros, DocumentID. O exemplo especifica o LCID para inglês, 1033, que é o idioma dos dados nas colunas.

Este exemplo também especifica que o controle de alterações está desativado sem nenhuma população. Posteriormente, fora do horário de pico, o exemplo usa uma instrução ALTER FULLTEXT INDEX para iniciar uma população completa no novo índice e habilitar o controle de alterações automático.

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  

Posteriormente, fora do horário de pico, o índice é populado:

ALTER FULLTEXT INDEX ON Production.Document SET CHANGE_TRACKING AUTO  
GO  

Criar um novo índice semântico usando o SQL Server Management Studio
Execute o Assistente para Indexação de Texto Completo e habilite Semântica Estatística na página Selecionar Colunas da Tabela para cada coluna na qual você queira criar um índice semântico. Para obter mais informações, inclusive sobre como iniciar o Assistente de Indexação de Texto Completo, veja Usar o Assistente de Indexação de Texto Completo.

Como criar um índice semântico quando existe um índice de texto completo

Você pode adicionar a indexação semântica ao alterar um índice de texto completo existente com a instrução ALTER FULLTEXT INDEX . Você também pode adicionar indexação semântica usando várias caixas de diálogo no SQL Server Management Studio.

Adicionar um novo índice semântico usando Transact-SQL
Chame a instrução ALTER FULLTEXT INDEX com as opções descritas abaixo para cada coluna na qual você queira adicionar um índice semântico. Para obter mais informações sobre todas as opções dessa instrução, consulte ALTER FULLTEXT INDEX (Transact-SQL).

Os índices de texto completo e semântico são ambos repopulados após uma chamada a ALTER, a menos que você especifique de outra forma.

  • Para adicionar somente a indexação de texto completo a uma coluna, use a sintaxe ADD .

  • Para adicionar indexação de texto completo e semântica a uma coluna, use a sintaxe ADD com a opção STATISTICAL_SEMANTICS .

  • Para adicionar indexação de texto completo a uma coluna já habilitada para indexação de texto completo, use a opção ADD STATISTICAL_SEMANTICS . Você só pode adicionar indexação semântica a uma coluna em uma única instrução ALTER .

Exemplo: adicionar a indexação semântica a uma coluna que já tenha a indexação de texto completo

O exemplo a seguir altera um índice de texto completo existente na tabela Production.Document no banco de dados de exemplo AdventureWorks2012. O exemplo adiciona um índice semântico na coluna Document da tabela Production.Document , que já tem um índice de texto completo. O exemplo especifica que o índice não será repopulado automaticamente.

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

Adicionar um índice semântico usando o SQL Server Management Studio
Você pode alterar as colunas que são habilitadas para indexação semântica e de texto completo na página Colunas de Índice de Texto Completo da caixa de diálogo Propriedades do Índice de Texto Completo . Para obter mais informações, veja Gerenciar índices de texto completo.

Requisitos e restrições para alterar um índice existente

  • Você não pode alterar um índice existente enquanto a população do índice está em andamento. Para obter mais informações sobre como monitorar o progresso da população de índice, veja Gerenciar e monitorar a pesquisa semântica.

  • Você não pode adicionar indexação a uma coluna, nem alterar ou remover a indexação para a mesma coluna, em uma única chamada à instrução ALTER FULLTEXT INDEX .

Descartando um índice semântico

Como descartar um índice semântico

Você pode remover a indexação semântica ao alterar um índice de texto completo existente com a instrução ALTER FULLTEXT INDEX . Você também pode descartar a indexação semântica usando várias caixas de diálogo no SQL Server Management Studio.

Descartar um novo índice semântico usando Transact-SQL

  • Para remover a indexação semântica somente de uma coluna ou colunas, chame a instrução ALTER FULLTEXT INDEX com a opção ALTER COLUMNcolumn_nameDROP STATISTICAL_SEMANTICS . Você pode remover a indexação de várias colunas em uma única instrução ALTER .
```sql  
USE database_name  
GO  

ALTER FULLTEXT INDEX  
    ALTER COLUMN column_name  
    DROP STATISTICAL_SEMANTICS  
GO  
```  
  • Para remover a indexação semântica e de texto completo de uma coluna, chame a instrução ALTER FULLTEXT INDEX com a opção ALTER COLUMNcolumn_nameDROP .

    USE database_name  
    GO  
    
    ALTER FULLTEXT INDEX  
        ALTER COLUMN column_name  
        DROP  
    GO  
    

Descartar um índice semântico usando o SQL Server Management Studio
Você pode alterar as colunas que são habilitadas para indexação semântica e de texto completo na página Colunas de Índice de Texto Completo da caixa de diálogo Propriedades do Índice de Texto Completo . Para obter mais informações, veja Gerenciar índices de texto completo.

Requisitos e restrições para descartar um índice semântico

  • Você não pode remover a indexação de texto completo de uma coluna enquanto retém a indexação semântica. A indexação semântica depende da indexação de texto completo para resultados de similaridade de documento.

  • Você não pode especificar a opção NO POPULATION ao remover a indexação semântica da última coluna de uma tabela para a qual a indexação semântica foi habilitada. Um ciclo de população é necessário para remover os resultados que foram previamente indexados.

Verificando se a pesquisa semântica está habilitada em objetos de banco de dados

Como verificar se a pesquisa semântica está habilitada em objetos de banco de dados

A pesquisa semântica está habilitada para um banco de dados?
Consulte a propriedade IsFullTextEnabled da função de metadados DATABASEPROPERTYEX (Transact-SQL ).

Um valor de retorno 1 indica a pesquisa de texto completo e a pesquisa semântica estão habilitada para o banco de dados; um valor de retorno 0 indica que não são habilitadas.

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

A pesquisa semântica está habilitada para uma tabela?
Consulte a propriedade TableFullTextSemanticExtraction da função de metadados OBJECTPROPERTYEX (Transact-SQL ).

Um valor de retorno 1 indica a pesquisa semântica está habilitada para a tabela; um valor de retorno 0 indica que ela não está habilitada.

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

A pesquisa semântica está habilitada para uma coluna?
Para determinar se a pesquisa de semântica está habilitada para uma coluna específica:

  • Consulte a propriedade StatisticalSemantics da função de metadados COLUMNPROPERTY (Transact-SQL ).

    Um valor de retorno 1 indica a pesquisa semântica está habilitada para a coluna; um valor de retorno 0 indica que ela não está habilitada.

    SELECT COLUMNPROPERTY(OBJECT_ID('table_name'), 'column_name', 'StatisticalSemantics')  
    GO  
    
  • Consulte o sys.fulltext_index_columns de exibição de catálogo (Transact-SQL) para o índice de texto completo.

    Um valor 1 na coluna statistical_semantics indica que a coluna especificada está habilitada para a indexação semântica, além da indexação de texto completo.

    SELECT * FROM sys.fulltext_index_columns WHERE object_id = OBJECT_ID('table_name')  
    GO  
    
  • No Pesquisador de Objetos no Management Studio, clique com o botão direito do mouse em uma coluna e selecione Propriedades. Na página Geral da caixa de diálogo Propriedades da Coluna , verifique o valor da propriedade Semântica Estatística .

    Um valor True indica que a coluna especificada está habilitada para a indexação semântica, além da indexação de texto completo.

Como verificar os idiomas com suporte para a pesquisa semântica

Importante

Há suporte para menos idiomas na indexação semântica do que na indexação de texto completo. Como resultado, pode haver colunas que permitam a indexação para pesquisa de texto completo, mas não para pesquisa semântica.

Consulte a exibição de catálogo sys.fulltext_semantic_languages (Transact-SQL).

SELECT * FROM sys.fulltext_semantic_languages  
GO  

Há suporte para os seguintes idiomas na indexação semântica. Essa lista representa a saída da exibição de catálogo sys.fulltext_semantic_languages (Transact-SQL), ordenada pelo LCID.

Idioma LCID
Alemão 1031
Inglês (EUA) 1033
Francês Etapas de resolução para o seguinte evento ID 1036
Italiano 1040
Português (Brasil) 1046
Russo 1049
Sueco 1053
Inglês (Reino Unido) 2057
Português (Portugal) 2070
Espanhol 3082

Como determinar os tipos de documento que podem ser indexados

Consulte a exibição de catálogo sys.fulltext_document_types (Transact-SQL).

Se o tipo de documento que você deseja indexar não estiver na lista de tipos com suporte, talvez seja preciso localizar, baixar e instalar filtros adicionais. Para obter mais informações, consulte Exibir ou alterar filtros registrados e separadores de palavras.

Prática recomendada: considerar a criação de um grupo de arquivos separado para os índices de texto completo e semântico

Considere criar um grupo de arquivos separado para os índices de texto completo e semântico se a alocação de espaço em disco for um problema. Os índices semânticos são criados no mesmo grupo de arquivos que o índice de texto completo. Um índice semântico totalmente populado pode conter uma grande quantidade de dados.

Problema: a pesquisa em coluna específica não retorna resultados

Um LCID não Unicode foi especificado para um idioma Unicode?
É possível habilitar a indexação semântica em um tipo de coluna não Unicode com um LCID para um idioma que tenha apenas palavras Unicode, como o LCID 1049 para russo. Neste caso, nenhum resultado será retornado dos índices semânticos nesta coluna.