Criar e gerenciar índices de Full-Text

As informações em índices de texto completo são usadas pelo mecanismo de Full-Text para compilar consultas de texto completo que podem pesquisar rapidamente uma tabela em busca de palavras ou combinações de palavras específicas. Um índice de texto completo armazena informações sobre palavras significativas e sua localização em uma ou mais colunas de uma tabela de banco de dados. Um índice de texto completo é um tipo especial de índice funcional baseado em token que é criado e mantido pelo mecanismo de Full-Text para SQL Server. O processo de criação de um índice de texto completo difere da criação de outros tipos de índices. Em vez de construir uma estrutura de árvore B com base em um valor armazenado em uma linha específica, o mecanismo de Full-Text cria uma estrutura de índice invertida, empilhada e compactada com base em tokens individuais do texto que está sendo indexado. O tamanho de um índice de texto completo é limitado apenas pelos recursos de memória disponíveis do computador no qual a instância do SQL Server está em execução.

A partir do SQL Server 2008, os índices de texto completo são integrados ao Mecanismo de Banco de Dados, em vez de residirem no sistema de arquivos como nas versões anteriores do SQL Server. Para um novo banco de dados, o catálogo de texto completo agora é um objeto virtual que não pertence a nenhum grupo de arquivos; é apenas um conceito lógico que se refere a um grupo de índices de texto completo. Observe, no entanto, que durante a atualização de um banco de dados do SQL Server 2005, qualquer catálogo de texto completo que contenha arquivos de dados, um novo grupo de arquivos será criado; para obter mais informações, consulte Atualizar Full-Text Pesquisa.

Observação

No SQL Server 2008 e versões posteriores, o mecanismo de Full-Text reside no processo do SQL Server, em vez de em um serviço separado. A integração do mecanismo de Full-Text ao Mecanismo de Banco de Dados melhora a capacidade de gerenciamento de texto completo, a otimização da consulta mista e o desempenho geral.

Somente um índice de texto completo é permitido por tabela. Para que um índice de texto completo seja criado em uma tabela, a tabela deve ter uma única coluna nonnull exclusiva. Você pode criar um índice de texto completo em colunas do tipo char, , varchar, nchar, nvarchar, text, , ntext, image, xmle varbinary(max)varbinarypode ser indexado para pesquisa de texto completo. Criar um índice de texto completo em uma coluna cujo tipo de dados é varbinary, imagevarbinary(max)ou xml requer que você especifique uma coluna de tipo. Uma coluna de tipo é uma coluna de tabela na qual você armazena a extensão de arquivo (.doc, .pdf, .xlse assim por diante) do documento em cada linha.

O processo de criação e manutenção de um índice de texto completo é chamado de população (também chamado de rastreamento). Há três tipos de população de índice de texto completo: população completa, população baseada em controle de alterações e população com base em carimbo de data/hora incremental. Para obter mais informações, consulte Preencher índices de texto completo.

Tarefas comuns

Para criar um índice de texto completo

Para alterar um índice de texto completo

Para eliminar um índice de texto completo

Nesse Tópico

Estrutura de índice Full-Text

Uma boa compreensão da estrutura de um índice de texto completo ajudará você a entender como funciona o mecanismo de Full-Text. Este tópico usa o seguinte trecho da tabela Documento no Adventure Works como uma tabela de exemplo. Este trecho mostra apenas duas colunas, a coluna DocumentID e a coluna Título e três linhas da tabela.

Para este exemplo, vamos supor que um índice de texto completo tenha sido criado na coluna Título .

ID do Documento Título
1 Manutenção de manivela e pneu
2 Suporte do refletor dianteiro e conjunto do refletor 3
3 Instalação do colchete do refletor frontal

Por exemplo, a tabela a seguir, que mostra o Fragmento 1, ilustra o conteúdo do índice de texto completo criado na coluna Título da tabela Documento . Os índices de texto completo contêm mais informações do que os apresentados nesta tabela. A tabela é uma representação lógica de um índice de texto completo e é fornecida apenas para fins de demonstração. As linhas são armazenadas em um formato compactado para otimizar o uso do disco.

Observe que os dados foram invertidos dos documentos originais. A inversão ocorre porque as palavras-chave são mapeadas para os identificadores de documentos. Por esse motivo, um índice de texto completo geralmente é conhecido como um índice invertido.

Observe também que a palavra-chave "e" foi removida do índice de texto completo. Isso é feito porque "e" é uma palavra irrelevante e a remoção de palavras irrelevantes de um índice de texto completo pode levar a uma economia substancial no espaço em disco, melhorando assim o desempenho da consulta. Para obter mais informações sobre palavras irrelevantes, consulte Configurar e gerenciar palavras irrelevantes e listas de palavras irrelevantes para pesquisa de Full-Text.

Fragmento 1

Palavra-chave ColId DocId Ocorrência
Manivela 1 1 1
Braço 1 1 2
Pneu 1 1 4
Manutenção 1 1 5
Frente 1 2 1
Frente 1 3 1
Refletor 1 2 2
Refletor 1 2 5
Refletor 1 3 2
Suporte 1 2 3
Colchete 1 3 3
Assembléia 1 2 6
3 1 2 7
Instalação 1 3 4

A coluna Palavra-chave contém uma representação de um único token extraído no momento da indexação. Separadores de palavras determinam o que compõe um token.

A coluna ColId contém um valor que corresponde a uma coluna específica indexada em texto completo.

A coluna DocId contém valores para um inteiro de oito bytes que corresponde a um valor de chave exclusivo em uma tabela com indexação de texto completo. Esse mapeamento é necessário quando a chave de texto completo não é um tipo de dados inteiro. Nesses casos, os mapeamentos entre valores de chave de texto completo e valores de DocId são mantidos em uma tabela separada chamada tabela de mapeamento de DocId. Para consultar esses mapeamentos, use o procedimento armazenado do sistema sp_fulltext_keymappings. Para satisfazer uma condição de pesquisa, os valores DocId da tabela mencionada acima precisam ser unidos à tabela de mapeamento de DocId para recuperar linhas da tabela base que está sendo interrogada. Se o valor da chave de texto completo da tabela base for um tipo inteiro, o valor servirá diretamente como DocId e nenhum mapeamento será necessário. Portanto, usar valores inteiros de chave de texto completo pode ajudar a otimizar consultas de texto completo.

A coluna Ocorrência contém um valor inteiro. Para cada valor DocId, há uma lista de valores de ocorrência que correspondem aos deslocamentos relativos de palavras da palavra-chave específica dentro do DocId. Os valores de ocorrência são úteis para determinar correspondências de frases ou proximidade, por exemplo, frases têm valores de ocorrência numericamente adjacentes. Eles também são úteis no cálculo de pontuações de relevância; por exemplo, o número de ocorrências de uma palavra-chave em um DocId pode ser usado na avaliação.

Nesse Tópico

Fragmentos de índice Full-Text

O índice lógico de texto completo geralmente é dividido entre várias tabelas internas. Cada tabela interna é chamada de fragmento de índice de texto completo. Alguns desses fragmentos podem conter dados mais recentes do que outros. Por exemplo, se um usuário atualizar a linha a seguir cujo DocId é 3 e a tabela estiver sendo acompanhada automaticamente por alterações, um novo fragmento será criado.

ID do Documento Título
3 Refletor traseiro

No exemplo a seguir, que mostra o Fragmento 2, o fragmento contém dados mais recentes sobre DocId 3 em comparação com o Fragmento 1. Portanto, quando o usuário consulta o "Refletor Traseiro", os dados do Fragmento 2 são usados para DocId 3. Cada fragmento é marcado com um timestamp de criação que pode ser consultado usando a vista de catálogo sys.fulltext_index_fragments.

Fragmento 2

Palavra-chave ColId DocId Occ
Traseira 1 3 1
Refletor 1 3 2

Como pode ser visto no Fragmento 2, as consultas de texto completo precisam consultar cada fragmento internamente e descartar entradas mais antigas. Portanto, um número excessivo de fragmentos no índice de texto completo pode causar uma degradação substancial no desempenho das consultas. Para reduzir o número de fragmentos, reorganizar o catálogo de texto completo usando a opção REORGANIZE da instrução ALTER FULLTEXT CATALOGTransact-SQL. Essa instrução executa uma mesclagem principal, que mescla os fragmentos em um único fragmento maior e remove todas as entradas obsoletas do índice de texto completo.

Depois de reorganizado, o índice de exemplo conterá as seguintes linhas:

Palavra-chave ColId DocId Occ
Manivela 1 1 1
Braço 1 1 2
Pneu 1 1 4
Manutenção 1 1 5
Frente 1 2 1
Traseira 1 3 1
Refletor 1 2 2
Refletor 1 2 5
Refletor 1 3 2
Colchete 1 2 3
Assembléia 1 2 6
3 1 2 7

Nesse Tópico