Criar e gerenciar índices de texto completo

Aplica-se a:SQL ServerBanco de Dados SQL do AzureInstância Gerenciada de SQL do Azure

Este artigo descreve como criar, preencher e gerenciar índices em texto completo no Mecanismo de Banco de Dados do SQL Server. Um índice em texto completo suporta busca por palavras-chave e linguística em vez de colunas baseadas em caracteres em uma tabela.

Criar um catálogo de texto completo

Antes de criar um índice em texto completo, você precisa de um catálogo em texto completo. O catálogo é um contêiner virtual de um ou mais índices de texto completo. Para mais informações, veja Criar e Gerenciar Catálogos Full-Text.

Criar, alterar ou descartar um índice de texto completo

Preencher um índice de texto completo

O processo de criar e manter um índice de texto completo é chamado de população (também conhecido como rastreamento). Há três tipos de população de índice de texto completo:

  • População completa
  • População baseada em rastreamento de alterações
  • População incremental com base em um carimbo de data/hora

Para obter mais informações, veja Preencher índices de texto completo.

Exibir as propriedades de um índice de texto completo

Exibir as propriedades de um índice de texto completo com o Transact-SQL

Exibição de catálogo ou de gerenciamento dinâmico Descrição
sys.fulltext_index_catalog_usages Retorna uma linha para cada catálogo de texto completo para referência de índice de texto completo.
sys.fulltext_index_columns Contém uma linha para cada coluna que faz parte de um índice de texto completo.
sys.fulltext_index_fragments Um índice em texto completo utiliza tabelas internas chamadas fragmentos de índice em texto completo para armazenar os dados do índice invertido. Você pode usar essa visão para consultar os metadados desses fragmentos. Esta exibição contém uma linha para cada fragmento de índice de texto completo em toda tabela que contém um índice de texto completo.
sys.fulltext_indexes Contém uma linha por índice de texto completo de um objeto tabular.
sys.dm_fts_index_keywords Retorna informações sobre o conteúdo de um índice de texto completo da tabela especificada.
sys.dm_fts_index_keywords_by_document Retorna informações sobre o conteúdo no nível de documento de um índice de texto completo da tabela especificada. Uma determinada palavra-chave pode aparecer em vários documentos.
sys.dm_fts_index_population Retorna informações sobre as populações de índices de texto completo que estão em andamento.

Exibir as propriedades de um índice de texto completo com o SQL Server Management Studio

Observação

Para exibir propriedades de índices de texto completo para bancos de dados SQL do Azure, use Transact-SQL.

  1. No SQL Server Management Studio, no Pesquisador de Objetos, expanda o servidor.

  2. Expanda Bancos de Dadose expanda o banco de dados que contém o índice de texto completo.

  3. Expanda Tabelas.

  4. Clique com o botão direito do mouse na tabela em que o índice de texto completo está definido, escolha Índice de texto completo e, no menu de contexto Índice de texto completo, escolha Propriedades. Essa ação abre a caixa de diálogo Propriedades do índice de texto completo.

  5. No painel Selecionar uma página , selecione qualquer uma das seguintes páginas:

    Página Descrição
    Geral Exibe as propriedades básicas do índice de texto completo. Essas propriedades incluem várias propriedades modificáveis e muitas propriedades imutáveis, como nome do banco de dados, nome da tabela e nome da coluna de chave em texto completo. As propriedades modificáveis são:

    Lista de palavras irrelevantes do índice de texto completo

    Indexação de texto completo habilitada

    Controle de Alterações

    Lista de propriedades de pesquisa
    Colunas Exibe as colunas da tabela que estão disponíveis para indexação de texto completo. A(s) coluna(s) selecionada(s) tem(têm) índice de texto completo. Você pode selecionar tantas colunas disponíveis quantas desejar para incluí-las no índice de texto completo. Para obter mais informações, veja Preencher índices de texto completo.
    Agendas Use esta página para criar ou gerenciar agendas para executar um trabalho do SQL Server Agent que inicia uma população incremental de tabela para as populações de índice de texto completo. Para obter mais informações, veja Preencher índices de texto completo.

    Nota: Após sair da caixa de diálogo Propriedades do Índice de Texto Completo, qualquer agendamento recém-criado é associado a um trabalho do SQL Server Agent (Iniciar População Incremental da Tabela em database_name.table_name).
  6. Escolha OK para salvar as alterações e sair da caixa de diálogo Propriedades do índice de texto completo.

Exibir as propriedades de colunas e tabelas indexadas

Você pode usar várias funções Transact-SQL, como OBJECTPROPERTYEX, para obter o valor de várias propriedades de indexação de texto completo. Essas informações são úteis para administrar e solucionar problemas de pesquisa de texto completo.

A tabela a seguir lista as propriedades de texto completo relacionadas a colunas e tabelas indexadas e suas funções Transact-SQL relacionadas.

Propriedade Descrição Função
FullTextTypeColumn TYPE COLUMN na tabela que contém as informações sobre o tipo de documento da coluna. COLUMNPROPERTY
IsFulltextIndexed Especifica se uma coluna está habilitada para indexação em texto completo. COLUMNPROPERTY
IsFulltextKey Se o índice é a chave de texto completo de uma tabela. INDEXPROPERTY
TableFulltextBackgroundUpdateIndexOn Se uma tabela tem indexação de atualização de texto completo em segundo plano. OBJECTPROPERTYEX
TableFulltextCatalogId ID do catálogo de texto completo no qual residem os dados de índice de texto completo da tabela. OBJECTPROPERTYEX
TableFulltextChangeTrackingOn Se o controle de alterações de texto completo está habilitado em uma tabela. OBJECTPROPERTYEX
TableFulltextDocsProcessed Número de linhas processadas desde o início da indexação de texto completo. OBJECTPROPERTYEX
TableFulltextFailCount Número de linhas que a pesquisa de texto completo não indexou. OBJECTPROPERTYEX
TableFulltextItemCount Número de linhas que foram indexadas com texto completo com êxito. OBJECTPROPERTYEX
TableFulltextKeyColumn A ID de coluna da coluna de chave exclusiva de texto completo. OBJECTPROPERTYEX
TableFullTextMergeStatus Indica se uma tabela que possui um índice de texto completo está atualmente em processo de mesclagem. OBJECTPROPERTYEX
TableFulltextPendingChanges Número de entradas de controle de alterações pendentes a serem processadas. OBJECTPROPERTYEX
TableFulltextPopulateStatus Status de população de uma tabela de texto completo. OBJECTPROPERTYEX
A tabela tem índice de texto completo ativo Se uma tabela tem um índice de texto completo ativo. OBJECTPROPERTYEX

Obtenha informações sobre a coluna-chave de texto completo

Normalmente, você junta o resultado de CONTAINSTABLE ou FREETEXTTABLE funções com valores em conjunto de linhas com a tabela base. Nesses casos, você precisa saber o nome da coluna de chave exclusiva. Você pode verificar se um dado índice único é usado como chave de texto completo e obter o identificador da coluna de chave de texto completo.

Determinar se um dado índice exclusivo é usado como a coluna de chave de texto completo

Use uma instrução SELECT para chamar a função INDEXPROPERTY. Na chamada de função, use a OBJECT_ID função para converter o nome da tabela (table_name) no ID da tabela, especifique o nome de um índice único para a tabela e especifique a propriedade de índice IsFulltextKey , conforme segue:

SELECT INDEXPROPERTY(OBJECT_ID('table_name'), 'index_name', 'IsFulltextKey');

Essa instrução retorna 1 se o índice impuser a unicidade da coluna da chave do texto completo e 0 se não o fizer.

Exemplo

O exemplo a seguir verifica se o PK_Document_DocumentNode índice impõe a unicidade da coluna de chave de texto completo:

USE AdventureWorks2025;
GO

SELECT INDEXPROPERTY(OBJECT_ID('Production.Document'), 'PK_Document_DocumentNode', 'IsFulltextKey');

Este exemplo retornará 1 se o índice PK_Document_DocumentNode impuser a exclusividade da coluna de chave de texto completo. Caso contrário, retorna 0 ou NULL. NULL significa que você está usando um nome de índice inválido, o nome do índice não corresponde à tabela, a tabela não existe, e assim por diante.

Localizar o identificador da coluna de chave de texto completo

Cada tabela habilitada para texto completo possui uma coluna que impõe linhas únicas para a tabela (a coluna de chave única ). A propriedade TableFulltextKeyColumn, obtida da função OBJECTPROPERTYEX, contém o ID da coluna de chave exclusiva.

Para obter esse identificador, use uma SELECT instrução que chame a OBJECTPROPERTYEX função. Use a OBJECT_ID função para converter o nome da tabela (table_name) no ID da tabela e especifique a TableFulltextKeyColumn propriedade, da seguinte forma:

SELECT OBJECTPROPERTYEX(OBJECT_ID('table_name'), 'TableFulltextKeyColumn') AS 'Column Identifier';

Exemplos

O exemplo a seguir retorna o identificador da coluna de chave de texto completo ou NULL. NULL Implica que você está usando um nome de índice inválido, o nome do índice não corresponde à tabela, a tabela não existe, ou coisas do tipo.

USE AdventureWorks2025;
GO

SELECT OBJECTPROPERTYEX(OBJECT_ID('Production.Document'), 'TableFulltextKeyColumn');
GO

O exemplo a seguir mostra como usar o identificador da coluna de chave única para obter o nome da coluna.

USE AdventureWorks2025;
GO

DECLARE @key_column AS SYSNAME;

SET @key_column = COL_NAME(
    OBJECT_ID('Production.Document'),
    OBJECTPROPERTYEX(OBJECT_ID('Production.Document'), 'TableFulltextKeyColumn')
);

SELECT @key_column AS 'Unique Key Column';
GO

Este exemplo retorna um conjunto de resultados chamado Unique Key Column, que exibe uma única linha contendo o nome da coluna de chave exclusiva da tabela Document, DocumentNode. Se essa consulta continha um nome de índice inválido, o nome do índice não corresponde à tabela, a tabela não existia, e assim por diante, ela retorna NULL.

Indexação de colunas varbinary(max) e XML

Se você indexar em texto completo uma coluna varbinary(max),varbinary ou xml , pode consultá-la usando os predicados de texto completo (CONTAINS e FREETEXT) e funções (CONTAINSTABLE e FREETEXTTABLE), como qualquer outra coluna indexada em texto completo.

Indexar dados varbinary(max) ou varbinary

Uma única coluna varbinary (max) ou varbinary pode armazenar vários tipos de documentos. O Mecanismo de Banco de Dados suporta qualquer tipo de documento para o qual um filtro esteja instalado e disponível no sistema operacional. O tipo de cada documento é identificado pela extensão de arquivo do documento. Por exemplo, para uma .doc extensão de arquivo, a busca em texto completo usa o filtro que suporta documentos do Microsoft Word. Para obter uma lista dos tipos de documento disponíveis, veja a exibição de catálogo sys.fulltext_document_types .

O mecanismo de texto completo pode usar os filtros existentes instalados no sistema operacional. Para que você possa usar filtros do sistema operacional, separadores de palavras e lematizadores, carregue-os na instância do servidor da seguinte maneira:

EXECUTE sp_fulltext_service
    @action = 'load_os_resources',
    @value = 1;

Para criar um índice de texto completo em uma coluna varbinary(max) , o Mecanismo de Texto Completo precisa de acesso às extensões de arquivo dos documentos na coluna varbinary(max) . Você deve armazenar essas informações em uma coluna de tabela, chamada coluna de tipo, que você associa à coluna varbinary(max) no índice de texto completo. Ao indexar um documento, o Mecanismo de Texto Completo utiliza a extensão de arquivo na coluna de tipo para identificar o filtro a ser usado.

Indexar dados XML

Uma coluna de tipo de dados xml armazena apenas fragmentos e documentos XML, e somente o filtro XML é usado para os documentos. Portanto, uma coluna de tipo é desnecessária. Em colunas xml , o índice de texto completo indexa o conteúdo dos elementos XML, mas ignora a marcação XML. Os valores de atributos são indexados como texto completo, a menos que sejam valores numéricos. Tags de elemento são usadas como delimitadores de token. Há suporte a fragmentos e documentos XML ou HTML bem formados que contêm vários idiomas.

Para mais informações sobre indexação e consulta em uma coluna xml , veja Usar busca em texto completo com colunas XML.

Desabilitar ou reativar a indexação de texto completo de uma tabela

No Mecanismo de Banco de Dados, todos os bancos de dados criados pelos usuários são habilitados para texto integral por padrão. Além disso, uma tabela individual está automaticamente habilitada para indexação de texto completo desde que o índice de texto completo seja criado nela e uma coluna seja adicionada ao índice. Uma tabela está automaticamente desabilitada para indexação de texto completo quando a última coluna é descartada de seu índice de texto completo.

Em uma tabela que possui índice de texto completo, você pode desabilitar ou reativar manualmente uma tabela para indexação de texto completo usando o SQL Server Management Studio.

  1. Expanda o grupo do servidor, expanda Bancos de Dadose expanda o banco de dados que contém a tabela desejada para habilitação da indexação de texto completo.

  2. Expanda Tabelase clique com o botão direito do mouse na tabela que você quer desabilitar ou habilitar novamente para indexação de texto completo.

  3. Selecione Índice de texto completo e depois Desabilitar índice de texto completo ou Habilitar índice de texto completo.

Remover um índice de texto completo de uma tabela

  1. No Pesquisador de Objetos, clique com o botão direito do mouse na tabela com o índice de texto completo a ser excluído.

  2. Selecione Excluir Índice de Texto Completo.

  3. Quando solicitado, escolha OK para confirmar que você deseja excluir o índice de texto completo.