Compartilhar via


Criar e gerenciar índices de texto completo

As informações contidas em índices de texto completo são usadas pelo Mecanismo de Texto Completo para compilar consultas de texto completo que podem procurar determinadas palavras ou combinações de palavras rapidamente em uma tabela. Um índice de texto completo armazena informações sobre palavras importantes e sua localização em uma ou mais colunas de uma tabela de banco de dados. Um índice de texto completo consiste em um tipo especial de índice funcional com base em token que é criado e mantido pelo Mecanismo de Texto Completo do SQL Server. O processo de criação de um índice de texto completo é diferente da criação de outros tipos de índices. Em vez de construir uma estrutura da árvore B baseada em um valor armazenado em uma linha específica, o Mecanismo de Texto Completo compila uma estrutura de índice invertida, empilhada e compactada baseada em tokens individuais do texto que é indexado. O tamanho de um índice de texto completo se limita apenas aos recursos de memória disponíveis no computador no qual a instância do SQL Server está sendo executada.

A partir do SQL Server 2008, os índices de texto completo são integrados ao Mecanismo de Banco de Dados, em vez de residir no sistema de arquivos, como em 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; ele é simplesmente um conceito lógico que se refere a um grupo dos índices de texto completo. Porém, observe que, durante a atualização de um banco de dados do SQL Server 2005, para qualquer catálogo de texto completo que contenha arquivos de dados, é criado um novo grupo de arquivos. Para obter mais informações, consulte Atualizar pesquisa de texto completo do SQL Server 2005.

ObservaçãoObservação

No SQL Server 2008 e em versões posteriores, o Mecanismo de Texto Completo reside no processo do SQL Server e não em um serviço separado. A integração do Mecanismo de Texto Completo ao Mecanismo de Banco de Dados melhora a capacidade de gerenciamento de texto completo, a otimização de consultas mistas e o desempenho como um todo.

Só é permitido um índice de texto completo por tabela. Para que um índice de texto completo seja criado em uma tabela, a tabela deve ter uma única coluna não nula exclusiva. Você pode criar um índice de texto completo em colunas do tipo char, varchar, nchar, nvarchar, text, ntext, image, xml, varbinary e varbinary(max), que podem ser indexadas para pesquisa de texto completo. A criação de um índice de texto completo em uma coluna cujo tipo de dados é varbinary, varbinary(max), image ou xml requer que você especifique uma coluna de tipo. Uma coluna de tipo consiste em uma coluna de tabela em que você armazena a extensão de arquivo (.doc, .pdf, .xls etc.) do documento em cada linha.

O processo de criar e manter um índice de texto completo é chamado de população (também conhecido como rastreamento). Existem três tipos de população de índice de texto completo: população completa, população com base em controle de alterações e população incremental com base em carimbo de data e hora. Para obter mais informações, consulte Popular índices de texto completo.

Neste tópico

  • Tarefas comuns

  • Estrutura de índice de texto completo

  • Fragmentos de índice de texto completo

Tarefas comuns

Para criar um índice de texto completo

Para alterar um índice de texto completo

Para descartar um índice de texto completo

[INÍCIO]

Estrutura de índice de texto completo

Um bom conhecimento da estrutura do índice de texto completo ajudará você a entender como funciona o Mecanismo de Texto Completo. Este tópico usa o trecho a seguir da tabela Document no Adventure Works como uma tabela de exemplo. Esse trecho mostra apenas duas colunas, a coluna DocumentID e a coluna Title, e três linhas da tabela.

Para este exemplo, assumiremos que um índice de texto completo foi criado na coluna Title.

DocumentID

Título

1

Crank Arm and Tire Maintenance

2

Front Reflector Bracket and Reflector Assembly 3

3

Front Reflector Bracket Installation

Por exemplo, a tabela a seguir, que mostra o Fragmento1, descreve o conteúdo do índice de texto completo criado na coluna Title da tabela Document. Os índices de texto completo contêm mais informações do que é apresentado nessa tabela. A tabela é uma representação lógica de um índice de texto completo e é fornecida somente 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 em relação aos documentos originais. A inversão ocorre porque as palavras-chave são mapeadas para as IDs de documento. Por esse motivo, geralmente um índice de texto completo é chamado de índice invertido.

Observe também que a palavra-chave "and" foi removida do índice de texto completo. Isso ocorre porque "and" é uma palavra irrelevante e remover essas palavras de um índice de texto completo pode levar a economias consideráveis do espaço em disco, melhorando o desempenho de consulta. Para obter mais informações sobre palavras irrelevantes, consulte Configurar e gerenciar palavras irrelevantes e listas de palavras irrelevantes (stoplists) para pesquisa de texto completo.

Fragmento 1

Palavra-chave

ColId

DocId

Ocorrência

Crank

1

1

1

Arm

1

1

2

Tire

1

1

4

Maintenance

1

1

5

Front

1

2

1

Front

1

3

1

Reflector

1

2

2

Reflector

1

2

5

Reflector

1

3

2

Bracket

1

2

3

Bracket

1

3

3

Assembly

1

2

6

3

1

2

7

Installation

1

3

4

A coluna Keyword contém uma representação de um único token extraído no momento da indexação. Os 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 com texto completo.

A coluna DocId contém valores para um inteiro de oito bytes que é mapeado para um valor de chave de texto completo específico em uma tabela indexada com texto completo. Esse mapeamento é necessário quando a chave de texto completo não é um tipo de dados integer. Em casos como esses, os mapeamentos entre valores de chave de texto completo e valores da coluna DocId são mantidos em uma tabela à parte, chamada tabela de mapeamento DocId. Para examinar esses mapeamentos, use o procedimento armazenado do sistema sp_fulltext_keymappings. Para atender a um critério de pesquisa, os valores de DocId da tabela acima precisam ser unidos à tabela de mapeamento DocId para recuperar linhas da tabela base que está sendo consultada. Se o valor da chave de texto completo da tabela base for do tipo inteiro, o valor funcionará diretamente como DocId, e nenhum mapeamento será necessário. Por isso, o uso de valores de chave de texto completo pode ajudar a otimizar consultas de texto completo.

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

[INÍCIO]

Fragmentos de índice de texto completo

O índice de texto completo lógico normalmente é dividido entre várias tabelas internas. Cada tabela interna é chamada de fragmento de índice de texto completo. Alguns desses fragmentos podem conter dados mais novos do que outros. Por exemplo, se um usuário atualiza a linha a seguir cujo DocId é 3 e a tabela tem controle de alterações automático, é criado um novo fragmento.

DocumentID

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 procura por “Refletor Traseiro", os dados do Fragmento 2 são usados para DocId 3. Cada fragmento é marcado com um carimbo de data/hora da criação, que pode ser consultado usando a exibição do catálogo sys.fulltext_index_fragments.

Fragmento 2

Palavra-chave

ColId

DocId

Occ

Traseiro

1

3

1

Reflector

1

3

2

Como pode ser visto no Fragmento 2, as consultas de texto completo precisam examinar cada fragmento internamente e descartar entradas mais antigas. Por isso, um número excessivo de fragmentos de índice de texto completo no índice de texto completo pode levar a uma diminuição considerável do desempenho de consulta. Para reduzir o número de fragmentos, reorganize o catálogo de texto completo usando a opção REORGANIZE da instrução ALTER FULLTEXT CATALOG Transact-SQL. Essa instrução executa uma mesclagem mestra 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 linhas seguintes:

Palavra-chave

ColId

DocId

Occ

Crank

1

1

1

Arm

1

1

2

Tire

1

1

4

Maintenance

1

1

5

Front

1

2

1

Traseiro

1

3

1

Reflector

1

2

2

Reflector

1

2

5

Reflector

1

3

2

Bracket

1

2

3

Assembly

1

2

6

3

1

2

7

[INÍCIO]