Habilitar a pesquisa semântica em tabelas e colunas

Aplica-se a: SQL Server

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 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 para índice de texto completo e outras caixas de diálogo no SQL Server Management Studio, conforme descrito neste artigo.

Criar 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 artigo.

  • 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. Não é possível 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, apenas o idioma principal e suas estatísticas de idioma associadas serão usados para a indexação semântica.

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

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. Veja mais informações sobre todas as opções para esta instrução em 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 AdventureWorks2022. 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 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

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 AdventureWorks2022. 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, DocumentSummary e Document da tabela Production.Document, enquanto o índice semântico é criado apenas na coluna Document. Esse índice de texto completo usa o catálogo de texto completo padrão recém-criado 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.

Criar um índice semântico quando existe um índice de texto completo

Você pode adicionar a indexação semântica ao modificar 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 na seção a seguir, para cada coluna na qual você queira adicionar um índice semântico. Veja mais informações sobre todas as opções para esta instrução em ALTER FULLTEXT INDEX (Transact-SQL).

Os índices de texto completo e semântico são ambos populados novamente 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. Só é possível 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 AdventureWorks2022. 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 é 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.

Alterar um índice semântico

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

  • Não é possível 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.

  • Não é possível adicionar indexação a uma coluna nem alterar ou descartar a indexação para a mesma coluna em uma única chamada à instrução ALTER FULLTEXT INDEX.

Remover um índice semântico

Você pode descartar a indexação semântica ao modificar um índice de texto completo existente com a instrução ALTER FULLTEXT INDEX. Você também pode descartar 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 descartar a indexação semântica somente de uma coluna ou de colunas, chame a instrução ALTER FULLTEXT INDEX com a opção ALTER COLUMN <column_name> DROP STATISTICAL_SEMANTICS. Você pode descartar a indexação de várias colunas em uma única instrução ALTER.

USE database_name;
GO

ALTER FULLTEXT INDEX
    ALTER COLUMN column_name
    DROP STATISTICAL_SEMANTICS;
GO

Para descartar a indexação semântica e de texto completo de uma coluna, chame a instrução ALTER FULLTEXT INDEX com a opção ALTER COLUMN <column_name> DROP.

USE database_name;
GO

ALTER FULLTEXT INDEX
    ALTER COLUMN column_name
    DROP;
GO

Descartar um índice semântico com 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

  • Não é possível descartar 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.

  • Não é possível especificar a opção NO POPULATION ao descartar 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.

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 retornado 1 indica que a pesquisa de texto completo e a pesquisa semântica estão habilitadas para o banco de dados. Um valor retornado de 0 indica que não estão habilitados.

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

A pesquisa semântica está habilitada para uma tabela?

Consulte a propriedade TableFullTextSemanticExtraction na função de metadados OBJECTPROPERTYEX (Transact-SQL).

O valor retornado 1 indica a pesquisa semântica está habilitada para a tabela; o valor retornado 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).

    O valor retornado 1 indica a pesquisa semântica está habilitada para a coluna; o valor retornado 0 indica que ela não está habilitada.

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

    Um valor 1 na coluna statistical_semantics indica que a coluna especificada está habilitada para 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.

Verificar os idiomas com suporte para a pesquisa semântica

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. Esta lista representa a saída da exibição de catálogo sys.fulltext_semantic_languages (Transact-SQL), ordenada por LCID.

Idioma LCID
Chinês tradicional 1028
Alemão 1031
Inglês (EUA) 1033
Francês Etapas de resolução para o seguinte evento ID 1036
Italiano 1040
Brasileiro 1046
Russo 1049
Sueco 1053
Chinês simplificado 2052
British English 2057
Português 2070
Chinês (Hong Kong, RAE, RPC) 2070
Espanhol 3082
Chinês (Singapura) 4100
Chinese (Macao SAR) 5124

Observação

Se os resultados estiverem vazios, você deverá baixar e instalar o banco de dados Estatísticas Semânticas de Idioma. Veja mais informações em Instalar, anexar e registrar o banco de dados de estatísticas semânticas de idioma.

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 outros filtros. Para obter mais informações, consulte Exibir ou alterar filtros registrados e separadores de palavras.

Melhor prática: criar um grupo de arquivos separado para os índices de texto completo e semânticos

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 é retornado dos índices semânticos nesta coluna.