Partilhar via


Preencher índices Full-Text

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

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

Um índice de texto completo suporta os seguintes tipos de população:

  • População completa
  • População automática ou manual com base no rastreamento de alterações em
  • População incremental com base em um carimbo de data/hora

População total

Durante uma população completa, as entradas de índice são criadas para todas as linhas de uma tabela ou vista 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 um novo índice de texto completo totalmente assim que ele é criado.

  • Por um lado, uma população completa pode consumir uma quantidade significativa de recursos. Portanto, ao criar um índice de texto completo durante períodos de pico, geralmente é uma prática recomendada atrasar a população completa até um horário fora de pico, particularmente se a tabela base de um índice de texto completo for grande.
  • Por outro lado, o catálogo de texto completo ao qual o índice pertence não é utilizável até que todos os seus í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 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.

Exemplo - Criar um índice de texto completo sem executar uma população completa

O exemplo a seguir cria um índice de texto completo na tabela Production.Document do banco de dados de exemplo AdventureWorks. 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  
  

Exemplo - Executar uma população completa em uma tabela

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

ALTER FULLTEXT INDEX ON Production.Document  
   START FULL POPULATION;  

População baseada no rastreio de alterações

Opcionalmente, pode utilizar o rastreio de alterações para manter um índice de texto completo após a 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 ele controla as alterações na tabela base desde a última população. Quando você usa o controle de alterações, o SQL Server mantém um registro das linhas na tabela base ou no modo de exibição indexado que foram modificadas por atualizações, exclusões ou inserções. As alterações de dados feitas 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 coluna de carimbo de data/hora, você pode usar a população incremental em vez do controle de alterações.

Quando você habilita o controle de alterações durante a criação do índice, o SQL Server preenche totalmente o novo índice de texto completo imediatamente após sua criação. Depois disso, as alterações são monitorizadas e propagadas para o índice de texto completo.

Ativar o controlo de alterações

Existem dois tipos de controlo de alterações:

  • Automático (opçãoCHANGE_TRACKING AUTO). O controle automático de alterações é o comportamento padrão.
  • Manual (opçãoCHANGE_TRACKING MANUAL).

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

  • Preenchimento automático

    Por padrão, ou se especificar CHANGE_TRACKING AUTO, o motor Full-Text usa o preenchimento automático 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 começar a monitorizar as alterações com preenchimento automático

    Exemplo - Alterar 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 da base de dados de exemplo AdventureWorks para usar o rastreio de alterações com população automática.

    USE AdventureWorks;  
    GO  
    ALTER FULLTEXT INDEX ON HumanResources.JobCandidate SET CHANGE_TRACKING AUTO;  
    GO   
    
  • População manual

    Se especificar CHANGE_TRACKING MANUAL, o motor Full-Text utiliza 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 a instrução ALTER FULLTEXT INDEX ... START UPDATE POPULATION. Você pode usar o SQL Server Agent para chamar essa instrução Transact-SQL periodicamente.

    Para começar a rastrear as alterações com de preenchimento manual

    Exemplo - Crie um índice de texto completo com o controle manual de alterações
    O exemplo a seguir irá criar um índice de texto completo que usará o rastreio de alterações com o preenchimento 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  
    

    Exemplo - Executar uma execução manual de população
    O exemplo a seguir executa uma população manual no índice de texto completo controlado 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  
    

Desativar o controlo de alterações

População incremental com base numa marca temporal

Uma população incremental é um mecanismo alternativo para preencher manualmente um índice de texto completo. Se uma tabela tiver um grande volume de inserções, o uso de população incremental pode ser mais eficiente do que o uso de população manual.

Você pode executar uma população incremental para um índice de texto completo que tenha CHANGE_TRACKING definido como MANUAL ou OFF.

O requisito para a população incremental é que a tabela indexada tem de ter uma coluna do carimbo de data/hora do tipo de dados . Se uma coluna de carimbo de data/hora não existir, a população incremental não poderá ser executada.

O SQL Server usa a coluna de timestamp para identificar linhas que foram alteradas desde a última atualizaçã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. No final de uma população, o motor Full-Text regista um novo valor de carimbo de data/hora . Esse valor é o maior valor de de carimbo de data/hora que o SQL Gatherer encontrou. Este valor será utilizado quando iniciar a próxima população incremental.

Em alguns casos, o pedido de uma população incremental resulta numa população completa.

  • Uma solicitação de população incremental em uma tabela sem um carimbo de data/hora coluna resulta em uma operação de população completa.
  • Se a primeira população em um índice de texto completo for uma população incremental, ela indexará todas as linhas, tornando-a equivalente a uma população completa.
  • Se quaisquer metadados que afetem o índice de texto completo da tabela tiverem sido alterados desde a última população, as solicitações de população incrementais serão implementadas como populações completas. Isso inclui alterações de metadados causadas pela alteração de qualquer definição de coluna, índice ou índice de texto completo.

Executar uma população incremental

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

Criar ou alterar um cronograma para um preenchimento gradual

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

  2. Expanda Bases de Dadose, em seguida, expanda a base de dados que contém o índice completo de texto.

  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 índicee, no menu de contexto índiceFull-Text, clique em Propriedades. Isso abre a caixa de diálogo Propriedades do índice de texto completo.

    Importante

    Se a tabela base ou vista não contiver uma coluna do tipo de dados carimbo de data/hora, a população incremental não será possível.

  4. No painel Selecionar uma página, selecione Horários.

    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 no modo de exibição indexado do índice de texto completo.

    As opções são as seguintes:

    • Para criar uma nova agenda, clique em Novo.

      Isso abre a caixa de diálogo Nova Full-Text Tabela de Indexação, onde pode-se criar um cronograma. Para salvar a agenda, clique em OK.

      Importante

      Um trabalho do SQL Server Agent (Iniciar População de Tabela Incremental em database_name.table_name) é associado a uma nova agenda depois que você sai da caixa de diálogo Propriedades de Índice Full-Text. Se você criar várias agendas para o mesmo índice de texto completo, todas elas usarão o mesmo trabalho.

    • Para alterar uma agenda existente, selecione a agenda existente e clique em Editar.

      Isso abre a caixa de diálogo Nova Tabela de Indexação Full-Text Agenda da, onde é possível modificar o cronograma.

      Observação

      Para obter informações sobre como modificar um trabalho do SQL Server Agent, consulte Modificar um trabalho.

    • Para remover uma agenda existente, selecione a agenda existente e clique em Excluir.

  5. Selecione OK.

Solucionar erros em uma população de texto completo (rastreamento)

Quando ocorre um erro durante um rastreamento, a ferramenta de registo de rastreamento da Pesquisa Full-Text cria e mantém um registo de rastreamento, que é um arquivo de texto sem formatação. 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 (neste exemplo, a instância padrão) estão localizados em %ProgramFiles%\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\LOG pasta.

O arquivo de log de rastreamento segue o seguinte esquema de nomenclatura:

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

As partes variáveis do nome do arquivo de log de rastreamento são as seguintes.

  • < DatabaseID> - A ID de um banco de dados. < dbid> é um número de cinco dígitos com zeros à esquerda.
  • < FullTextCatalogID> - ID de catálogo de texto completo. < catid> é um número de cinco dígitos com zeros à esquerda.
  • < n> - É um número 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 para 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 banco de dados/catálogo.

Ver também

sys.dm_fts_index_population (Transact-SQL)
Introdução ao Full-Text Pesquisa
Criar e gerir Full-Text índices
CRIAR ÍNDICE DE TEXTO COMPLETO (Transact-SQL)
ALTERAR ÍNDICE DE TEXTO COMPLETO (Transact-SQL)