Compartilhar via


Preencher índices de texto completo

Criar e manter um índice de texto completo envolve preencher o índice usando um processo chamado população (também conhecido como rastreamento).

Tipos de população

O SQL Server dá suporte aos seguintes tipos de população: população completa, população automática ou manual baseada em controle de alterações e população com base em carimbo de data/hora incremental.

População Completa

Durante uma população completa, as entradas de índice são criadas para todas as linhas de uma tabela ou exibição indexada. Uma população completa de um índice de texto completo cria entradas de índice para todas as linhas da tabela base ou exibição indexada.

Por padrão, o SQL Server preenche totalmente um novo índice de texto completo assim que ele é criado. No entanto, uma população completa pode consumir uma quantidade significativa de recursos. Portanto, ao criar um índice de texto completo durante os períodos de pico, geralmente é uma prática recomendada atrasar a população completa até um horário fora do pico, especialmente se a tabela base de um índice de texto completo for grande. No entanto, o catálogo de texto completo ao qual o índice pertence não é utilizável até que todos os índices de texto completo sejam preenchidos. Para criar um índice de texto completo sem preenchê-lo imediatamente, especifique a cláusula CHANGE_TRACKING OFF, NO POPULATION na instrução CREATE FULLTEXT INDEX. Se você especificar CHANGE_TRACKING MANUAL, o mecanismo de Full-Text usará a instrução. O SQL Server não preencherá o novo índice de texto completo até que você execute uma instrução ALTER FULLTEXT INDEX usando a cláusula START FULL POPULATION ou START INCREMENTAL POPULATION. Para obter mais informações, consulte exemplos "A. Criando um índice de texto completo sem executar uma população completa" e "B. Executando uma população completa na tabela", mais adiante neste tópico.

Alterar população de Tracking-Based

Opcionalmente, você pode usar o controle de alterações para manter um índice de texto completo após sua população completa inicial. Há uma pequena sobrecarga associada ao controle de alterações porque o SQL Server mantém uma tabela na qual acompanha as alterações na tabela base desde a última população. Quando o controle de alterações é usado, o SQL Server mantém um registro das linhas na tabela base ou na exibição indexada que foram modificadas por atualizações, exclusões ou inserções. As alterações de dados por meio de WRITETEXT e UPDATETEXT não são refletidas no índice de texto completo e não são captadas com o controle de alterações.

Observação

Para tabelas que contêm uma timestamp coluna, você pode usar populações incrementais.

Quando o controle de alterações é habilitado durante a criação do índice, o SQL Server preenche totalmente o novo índice de texto completo imediatamente após a criação. Depois disso, as alterações são controladas e propagadas para o índice de texto completo. Há dois tipos de controle de alterações, automático (CHANGE_TRACKING opção AUTO) e manual (CHANGE_TRACKING opção MANUAL). O controle automático de alterações é o comportamento padrão.

O tipo de controle de alterações determina como o índice de texto completo é preenchido, da seguinte maneira:

  • População automática

    Por padrão, ou se você especificar CHANGE_TRACKING AUTO, o Mecanismo de Full-Text usará a população automática no índice de texto completo. Após a conclusão da população completa inicial, as alterações são controladas à medida que os dados são modificados na tabela base e as alterações controladas são propagadas automaticamente. No entanto, o índice de texto completo é atualizado em segundo plano, portanto, as alterações propagadas podem não ser refletidas imediatamente no índice.

    Para configurar o acompanhamento de alterações com a população automática

    Para obter mais informações, consulte o exemplo "E. Alterando um índice de texto completo para usar o controle automático de alterações", mais adiante neste tópico.

  • População manual

    Se você especificar CHANGE_TRACKING MANUAL, o mecanismo de Full-Text usará a população manual no índice de texto completo. Após a conclusão da população completa inicial, as alterações são controladas à medida que os dados são modificados na tabela base. No entanto, eles não são propagados para o índice de texto completo até que você execute um ALTER FULLTEXT INDEX ... Instrução START UPDATE POPULATION. Você pode usar o SQL Server Agent para chamar essa instrução Transact-SQL periodicamente.

    Para começar a controlar as alterações com a população manual

    Para obter mais informações, consulte exemplos "C. Criando um índice de texto completo com controle manual de alterações" e "D. Executando uma população manual", mais adiante neste tópico.

Para desativar o controle de alterações

População de Timestamp-Based incremental

Uma população incremental é um mecanismo alternativo para preencher manualmente um índice de texto completo. Você pode executar uma população incremental para um índice de texto completo que CHANGE_TRACKING definido como MANUAL ou OFF. Se a primeira população em um índice de texto completo for uma população incremental, ela indexa todas as linhas, tornando-a equivalente a uma população completa.

O requisito para a população incremental é que a tabela indexada deve ter uma coluna do timestamp tipo de dados. Se uma timestamp coluna não existir, a população incremental não poderá ser executada. Uma solicitação de população incremental em uma tabela sem uma timestamp coluna resulta em uma operação de população completa. Além disso, se os metadados que afetam o índice de texto completo da tabela forem alterados desde a última população, as solicitações incrementais da população serão implementadas como populações completas. Isso inclui alterações de metadados causadas pela alteração de qualquer coluna, índice ou definições de índice de texto completo.

O SQL Server usa a timestamp coluna para identificar linhas que foram alteradas desde a última população. Em seguida, a população incremental atualiza o índice de texto completo para linhas adicionadas, excluídas ou modificadas após a última população ou enquanto a última população estava em andamento. Se uma tabela tiver um alto volume de inserções, o uso da população incremental poderá ser mais eficiente usando a população manual.

No final de uma população, o mecanismo de Full-Text registra um novo timestamp valor. Esse valor é o maior timestamp valor que o SQL Gatherer encontrou. Esse valor será usado quando uma população incremental subsequente for iniciada.

Para executar uma população incremental, execute uma instrução ALTER FULLTEXT INDEX usando a cláusula START INCREMENTAL POPULATION.

Exemplos de preenchimento de índices de Full-Text

Observação

Os exemplos nesta seção usam a tabela Production.Document ou a tabela HumanResources.JobCandidate do banco de dados de exemplo AdventureWorks.

Um. Criar um índice de texto completo sem executar uma população completa

O exemplo a seguir cria um índice de texto completo na Production.Document tabela do AdventureWorks banco de dados de exemplo. Este exemplo usa WITH CHANGE_TRACKING OFF, NO POPULATION para atrasar a população completa inicial.

CREATE UNIQUE INDEX ui_ukDoc ON Production.Document(DocumentID);  
CREATE FULLTEXT CATALOG AW_Production_FTCat;  
CREATE FULLTEXT INDEX ON Production.Document  
(  
    Document                         --Full-text index column name   
        TYPE COLUMN FileExtension    --Name of column that contains file type information  
        Language 1033                 --1033 is LCID for the English language  
)  
    KEY INDEX ui_ukDoc  
    ON AW_Production_FTCat  
    WITH CHANGE_TRACKING OFF, NO POPULATION;  
GO  
  

B. Executando uma população completa na tabela

O exemplo a seguir executa uma população completa da tabela Production.Document do banco de dados de exemplo AdventureWorks.

ALTER FULLTEXT INDEX ON Production.Document  
   START FULL POPULATION;  

C. Criando um índice de texto completo com controle manual de alterações

O exemplo a seguir cria um índice de texto completo que usará rastreamento de alterações com população manual na tabela HumanResources.JobCandidate do banco de dados de exemplo AdventureWorks.

USE AdventureWorks;  
GO  
CREATE UNIQUE INDEX ui_ukJobCand ON HumanResources.JobCandidate(JobCandidateID);  
CREATE FULLTEXT CATALOG ft AS DEFAULT;  
CREATE FULLTEXT INDEX ON HumanResources.JobCandidate(Resume)   
   KEY INDEX ui_ukJobCand   
   WITH CHANGE_TRACKING=MANUAL;  
GO  

D. Executando uma população de dados manualmente

O exemplo a seguir executa uma população manual no índice de texto completo rastreado por alterações da tabela HumanResources.JobCandidate do banco de dados de exemplo AdventureWorks.

USE AdventureWorks;  
GO  
ALTER FULLTEXT INDEX ON HumanResources.JobCandidate START UPDATE POPULATION;  
GO  

E. Alterando um índice de texto completo para usar o controle automático de alterações

O exemplo a seguir altera o índice de texto completo da tabela HumanResources.JobCandidate do banco de dados de exemplo para usar controle de alterações AdventureWorks com população automática.

USE AdventureWorks;  
GO  
ALTER FULLTEXT INDEX ON HumanResources.JobCandidate SET CHANGE_TRACKING AUTO;  
GO   

Criando ou alterando um cronograma para incremento populacional

Para criar ou alterar um agendamento para a população incremental no Management Studio

  1. No Pesquisador de Objetos, expanda o servidor.

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

  3. Expanda Tabelas.

Clique com o botão direito do mouse na tabela na qual o índice de texto completo está definido, selecione Full-Text índice e, no menu de contexto de índiceFull-Text , clique em Propriedades. Isso abre a caixa de diálogo Propriedades do índice de texto completo .

  1. No painel Selecionar uma página , selecione Agendas.

    Use esta página para criar ou gerenciar agendas para um trabalho do SQL Server Agent que inicia uma população de tabela incremental na tabela base ou exibição indexada do índice de texto completo.

    Importante

    Se a tabela ou exibição base não contiver uma coluna do timestamp tipo de dados, uma população completa será executada.

    As opções são as seguintes:

    • Para criar uma nova agenda, clique em Novo.

      Isso abre a caixa de diálogo Nova Tabela de Indexação Full-Text, na qual você pode criar uma agenda. Para salvar a agenda, clique em OK.

      Importante

      Uma tarefa do SQL Server Agent (Iniciar população de tabela incremental em database_name.table_name) é associada a um novo agendamento após você fechar a caixa de diálogo Propriedades do ÍndiceFull-Text. Se você criar vários agendamentos para o índice de texto completo, todos eles usarão a mesma tarefa.

    • Para alterar um agendamento, selecione-o e clique em Editar.

      Isso abre a caixa de diálogo Novo Full-Text Cronograma da Tabela de Indexação, na qual você pode modificar o cronograma.

      Observação

      Para obter informações sobre como modificar um trabalho, consulte Modificar um trabalho.

    • Para remover um agendamento, selecione-o e clique em Excluir.

  2. Clique em OK.

Solução de problemas de falhas em uma população Full-Text (Crawl)

Quando ocorre um erro durante um rastreamento, a instalação Full-Text de registro de rastreamento de pesquisa cria e mantém um log de rastreamento, que é um arquivo de texto simples. Cada log de rastreamento corresponde a um catálogo de texto completo específico. Por padrão, os logs de rastreamento de uma determinada instância, nesse caso, a primeira instância, estão localizados em %ProgramFiles%\Microsoft SQL Server\MSSQL12. Pasta MSSQLSERVER\MSSQL\LOG. O arquivo de log de rastreamento segue o seguinte esquema de nomenclatura:

SQLFT<DatabaseID><FullTextCatalogID>. LOG[<n>]

<DatabaseID>
A ID de um banco de dados. < dbid > é um número de cinco dígitos com zeros à esquerda.

<FullTextCatalogID>
ID do catálogo de texto completo. < catid > é um número de cinco dígitos com zeros à frente.

<n>
É um inteiro que indica que existem um ou mais logs de rastreamento do mesmo catálogo de texto completo.

Por exemplo, SQLFT0000500008.2 é o arquivo de log de rastreamento de um banco de dados com ID de banco de dados = 5 e ID de catálogo de texto completo = 8. O 2 no final do nome do arquivo indica que há dois arquivos de log de rastreamento para esse par de banco de dados/catálogo.

Consulte Também

sys.dm_fts_index_population (Transact-SQL)
Iniciar a pesquisa de texto completo
Criar e gerenciar índices de texto completo
CRIAR ÍNDICE DE TEXTO COMPLETO (Transact-SQL)
ALTER FULLTEXT INDEX (Transact-SQL)