Partilhar via


ALTERAR ÍNDICE DE TEXTO COMPLETO (Transact-SQL)

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

Altera as propriedades de um índice em texto completo no SQL Server.

Transact-SQL convenções de sintaxe

Sintaxe

ALTER FULLTEXT INDEX ON table_name
   { ENABLE
   | DISABLE
   | SET CHANGE_TRACKING [ = ] { MANUAL | AUTO | OFF }
   | ADD ( column_name
           [ TYPE COLUMN type_column_name ]
           [ LANGUAGE language_term ]
           [ STATISTICAL_SEMANTICS ]
           [ , ...n ]
         )
     [ WITH NO POPULATION ]
   | ALTER COLUMN column_name
     { ADD | DROP } STATISTICAL_SEMANTICS
     [ WITH NO POPULATION ]
   | DROP ( column_name [ , ...n ] )
     [ WITH NO POPULATION ]
   | START { FULL | INCREMENTAL | UPDATE } POPULATION
   | { STOP | PAUSE | RESUME } POPULATION
   | SET STOPLIST [ = ] { OFF | SYSTEM | stoplist_name }
     [ WITH NO POPULATION ]
   | SET SEARCH PROPERTY LIST [ = ] { OFF | property_list_name }
     [ WITH NO POPULATION ]
   }
[ ; ]

Arguments

table_name

O nome da tabela ou vista indexada que contém a coluna ou colunas incluídas no índice de texto completo. Especificar os nomes dos proprietários da base de dados e das tabelas é opcional.

ATIVAR | DESATIVAR

Diz ao SQL Server se deve recolher dados de índice em texto completo para table_name. O ENABLE ativa o índice de texto completo; DESATIVAR desliga o índice de texto completo. A tabela não suporta consultas em texto completo enquanto o índice estiver desativado.

Desativar um índice de texto completo permite desligar o acompanhamento de alterações mas manter o índice de texto completo, que pode reativar a qualquer momento usando o ENABLE. Quando o índice do texto completo é desativado, os metadados do índice do texto completo permanecem nas tabelas do sistema. Se CHANGE_TRACKING estiver no estado ativado (atualização automática ou manual) quando o índice de texto completo é desativado, o estado do índice congela, qualquer rastreamento em curso para e novas alterações aos dados da tabela não são rastreadas nem propagadas para o índice.

SET CHANGE_TRACKING { MANUAL | AUTO | DESLIGADO }

Especifica se alterações (atualizações, eliminações ou inserções) feitas nas colunas da tabela cobertas pelo índice de texto integral serão propagadas pelo SQL Server para o índice de texto completo. As alterações de dados através de WRITETEXT e UPDATETEXT não são refletidas no índice de texto completo e não são detetadas com o acompanhamento de alterações.

  • MANUAL

    Especifica que as alterações acompanhadas são propagadas manualmente chamando o ALTER FULLTEXT INDEX ... INICIAR ATUALIZAÇÃO DA POPULAÇÃO Transact-SQL declaração (população manual). Você pode usar o SQL Server Agent para chamar essa instrução Transact-SQL periodicamente.

  • AUTO

    Especifica que as alterações acompanhadas são propagadas automaticamente à medida que os dados são modificados na tabela base (população automática). Embora as alterações sejam propagadas automaticamente, estas alterações podem não ser refletidas imediatamente no índice do texto completo. AUTO é o padrão.

  • DESLIGADO

    Especifica que o SQL Server não mantém uma lista de alterações aos dados indexados.

ADD | LARGA column_name

Especifica as colunas a serem adicionadas ou eliminadas de um índice de texto completo. A coluna ou colunas devem ser do tipo char, varchar, nchar, nvarchar, text, ntext, image, xml, varbinary ou varbinary(max).

Use a cláusula DROP apenas nas colunas que já foram ativadas anteriormente para indexação em texto completo.

Use TYPE COLUMN e LANGUAGE com a cláusula ADD para definir estas propriedades na column_name. Quando uma coluna é adicionada, o índice de texto completo na tabela tem de ser repovoado para que as consultas de texto completo a esta coluna funcionem.

Observação

Se o índice de texto completo é preenchido após a adição de uma coluna ou se é retirado de um índice de texto completo depende de estar ativado o acompanhamento de alterações e de se SEM POPULAÇÃO é especificado. Para mais informações, consulte Interações de Monitorização de Alterações e NENHUM PARÂMETRO DE POPULAÇÃO.

TIPO COLUNA type_column_name

Especifica o nome de uma coluna de tabela, type_column_name, que é usada para guardar o tipo de documento de um documento varbinário, varbinário(max) ou imagem . Esta coluna, conhecida como coluna de tipo, contém uma extensão de ficheiro fornecida pelo utilizador (.doc, .pdf, .xls, e assim sucessivamente). A coluna tipo deve ser do tipo char, nchar, varchar ou nvarchar.

Especificar a COLUNA TIPO type_column_name apenas se column_name especificar uma coluna varbinária, varbinária(max) ou imagem , na qual os dados são armazenados como dados binários; caso contrário, o SQL Server devolve um erro.

Observação

No momento da indexação, o Full-Text Engine utiliza a abreviatura na coluna de tipo de cada linha da tabela para identificar qual o filtro de pesquisa em texto completo a usar para o documento em column_name. O filtro carrega o documento como um fluxo binário, remove a informação de formatação e envia o texto do documento para o componente word-breaker. Para obter mais informações, consulte Configurar e gerenciar filtros para pesquisa.

LÍNGUA language_term

A linguagem dos dados armazenados em column_name.

language_term é opcional e pode ser especificado como uma cadeia, valor inteiro ou hexadecimal correspondente ao identificador de localidade (LCID) de uma língua. Se language_term for especificado, o idioma que ele representa será aplicado a todos os elementos da condição de pesquisa. Se não for especificado nenhum valor, é utilizada a linguagem de texto completo padrão da instância do SQL Server.

Use o sp_configure procedimento armazenado para aceder à informação sobre a linguagem de texto completo padrão da instância do SQL Server.

Quando especificado como uma cadeia, language_term corresponde ao alias valor da coluna na sys.syslanguages tabela do sistema. A cadeia de caracteres deve ser colocada entre aspas simples, como em 'language_term'. Quando especificado como um inteiro, language_term é o LCID real que identifica o idioma. Quando especificado como valor hexadecimal, language_term é 0x seguido do valor hexadecimal do LCID. O valor hexadecimal não deve exceder oito dígitos, incluindo zeros à esquerda.

Se o valor estiver no formato DBCS (conjunto de caracteres de byte duplo), o SQL Server o converterá em Unicode.

Recursos, como quebradores de palavras e stemmers, devem estar ativados para a linguagem especificada como language_term. Se esses recursos não suportarem a linguagem especificada, o SQL Server devolve um erro.

Para colunas não BLOB e não XML contendo dados de texto em várias línguas, ou para casos em que a linguagem do texto armazenado na coluna é desconhecida, use o recurso de linguagem neutra (0x0). Para documentos armazenados em colunas do tipo XML ou BLOB, a codificação da linguagem dentro do documento é usada no momento da indexação. Por exemplo, nas colunas XML, o xml:lang atributo nos documentos XML identifica a linguagem. No momento da consulta, o valor anteriormente especificado em language_term torna-se a linguagem padrão usada para consultas de texto completo, a menos que language_term seja especificado como parte de uma consulta de texto completo.

STATISTICAL_SEMANTICS

Aplica-se a: SQL Server 2012 (11.x) e versões posteriores.

Cria os índices adicionais de frases-chave e similaridade de documentos que fazem parte da indexação semântica estatística. Para obter mais informações, consulte Pesquisa semântica (SQL Server).

[ , ... n ]

Indica que podem ser especificadas múltiplas colunas para as cláusulas ADD, ALTER ou DROP. Quando várias colunas são especificadas, separe essas colunas com vírgulas.

SEM POPULAÇÃO

Especifica que o índice de texto completo não será preenchido após uma operação ADD ou DROP na coluna ou uma operação SET STOPLIST. O índice só é povoado se o utilizador executar um START... Comando POPULACIONAL.

Quando NÃO É especificado POPULAÇÃO, o SQL Server não preenche um índice. O índice só é preenchido depois de o utilizador fornecer um ALTERAR ÍNDICE DE TEXTO COMPLETO... INICIAR COMANDO DE POPULAÇÃO. Quando NENHUMA POPULAÇÃO não é especificada, o SQL Server preenche o índice.

Se CHANGE_TRACKING estiver ativado e SEM POPULAÇÃO for especificada, o SQL Server devolve um erro. Se CHANGE_TRACKING estiver ativado e SEM POPULAÇÃO não for especificada, o SQL Server executa uma população completa no índice.

{ADICIONAR | DROP } STATISTICAL_SEMANTICS

Aplica-se a: SQL Server 2012 (11.x) e versões posteriores.

Permite ou desativa a indexação semântica estatística para as colunas especificadas. Para obter mais informações, consulte Pesquisa semântica (SQL Server).

START { COMPLETO | INCREMENTAL | ATUALIZAÇÃO } POPULAÇÃO

Diz ao SQL Server para começar a preencher o índice de texto completo de table_name. Se já estiver em curso uma população de índice de texto completo, o SQL Server devolve um aviso e não inicia uma nova população.

  • COMPLETO

    Especifica que todas as linhas da tabela são recuperadas para indexação em texto completo mesmo que as linhas já tenham sido indexadas.

  • INCREMENTAL

    Especifica que apenas as linhas modificadas desde a última população são recuperadas para indexação em texto completo. O INCREMENTAL só pode ser aplicado se a tabela tiver uma coluna com o carimbo temporal do tipo. Se uma tabela no catálogo de texto completo não contiver uma coluna do tipo timestamp, a tabela sofre uma população COMPLETA.

  • UPDATE

    Especifica o processamento de todas as inserções, atualizações ou eliminações desde a última vez que o índice de acompanhamento de alterações foi atualizado. A população de acompanhamento de alterações deve estar ativada numa tabela, mas o índice de atualização em segundo plano ou o rastreio automático de alterações não devem estar ativados.

{PÁRA | PAUSA | RESUMIR } POPULAÇÃO

Interrompe, ou pausa qualquer população em curso; ou para ou retoma qualquer população pausada.

STOP POPULATION não impede o rastreio automático de alterações nem o índice de atualizações em segundo plano. Para parar o rastreio de alterações, use SET CHANGE_TRACKING OFF.

PAUSE POPULATION e RESUME POPULATION só podem ser usados para populações completas. Não são relevantes para outros tipos de população porque as outras populações retomam os rastejos a partir de onde o rastejamento terminou.

LISTA DE PARAGENS DO SET { OFF | SISTEMA | stoplist_name }

Altera a lista de paradas em texto completo associada ao índice, se existir.

  • DESLIGADO

    Especifica que nenhuma lista de paragens está associada ao índice do texto completo.

  • SYSTEM

    Especifica que o sistema de texto completo predefinido STOPLIST deve ser usado para este índice de texto completo.

  • stoplist_name

    Especifica o nome da lista de paradas a ser associada ao índice de texto completo.

Para obter mais informações, consulte Configurar e gerir palavras proibidas e listas de palavras proibidas para a pesquisa Full-Text.

DEFINIR LISTA DE PROPRIEDADES DE PESQUISA { OFF | property_list_name } [ SEM POPULAÇÃO ]

Aplica-se a: SQL Server 2012 (11.x) e versões posteriores.

Altera a lista de propriedades de pesquisa associada ao índice, se existir.

  • DESLIGADO

    Especifica que nenhuma lista de propriedades está associada ao índice de texto completo. Quando desliga a lista de propriedades de pesquisa de um índice de texto completo (ALTER FULLTEXT INDEX ... SET SEARCH PROPERTY LIST OFF), a pesquisa de propriedades na tabela base deixa de ser possível.

    Por defeito, quando desliga uma lista de propriedades de pesquisa existente, o índice de texto completo repreenche automaticamente. Se especificar SEM POPULAÇÃO ao desligar a lista de propriedades de pesquisa, o repovoamento automático não ocorre. No entanto, recomendamos que, eventualmente, execute uma população completa neste índice de texto completo quando lhe for conveniente. Repovoar o índice de texto completo remove os metadados específicos de cada propriedade de pesquisa eliminada, tornando o índice de texto completo mais pequeno e eficiente.

  • property_list_name

    Especifica o nome da lista de propriedades de pesquisa a ser associada ao índice de texto completo.

    Adicionar uma lista de propriedades de pesquisa a um índice de texto completo requer repovoar o índice para indexar as propriedades de pesquisa registadas na lista associada de propriedades de pesquisa. Se especificar SEM POPULAÇÃO ao adicionar a lista de propriedades de pesquisa, precisa de executar uma população no índice, no momento apropriado.

Importante

Se o índice em texto completo esteve anteriormente associado a uma pesquisa diferente, é necessário reconstruir a lista de propriedades para que o índice fique num estado consistente. O índice é truncado imediatamente e fica vazio até que a população total seja esgotada. Para mais informações, veja Alterar a Lista de Propriedades de Pesquisa Causa a Reconstrução do Índice.

Observação

Pode associar uma dada lista de propriedades de pesquisa a mais do que um índice de texto completo na mesma base de dados.

Encontre as listas de propriedades de pesquisa na base de dados atual

Para mais informações sobre pesquisar listas de propriedades, consulte Pesquisar Propriedades de Documentos com Pesquisar Listas de Propriedades.

Observações

Nas colunas xml , pode criar um índice em texto completo que indexa o conteúdo dos elementos XML, mas ignora a marcação XML. Os valores dos atributos são indexados em texto completo, a menos que sejam valores numéricos. As etiquetas de elemento são usadas como limites de token. São suportados documentos XML ou HTML bem formados e fragmentos contendo múltiplas línguas. Para obter mais informações, consulte Usar Full-Text pesquisa com colunas XML.

Recomendamos que a coluna da chave de índice seja um tipo de dado inteiro. Isto proporciona otimizações no momento da execução da consulta.

O ALTER FULLTEXT INDEX não pode ser colocado dentro de uma transação de utilizador. Esta instrução deve ser executada numa transação implícita própria.

Para mais informações sobre índices em texto integral, consulte Criar e Gerir Full-Text Índices.

Interações entre o acompanhamento de alterações e NENHUM PARÂMETRO POPULACIONAL

Se o índice em texto completo é preenchido depende de estar ativado o acompanhamento de alterações e se WITH NO POPULATION está especificado na instrução ALTER FULLTEXT INDEX. A tabela seguinte resume o resultado da sua interação.

Acompanhamento de alterações SEM POPULAÇÃO Result
Não ativado Não especificado É realizada uma população completa no índice.
Não ativado Especificado Não ocorre nenhuma população do índice até que um ALTER FULLTEXT INDEX... É emitida a declaração START POPULATION.
Ativado(a) Especificado Surge um erro e o índice não é alterado.
Ativado(a) Não especificado É realizada uma população completa no índice.

Para mais informações sobre como preencher índices de texto completo, consulte Preencher Full-Text Índices.

Alterar a lista de propriedades de pesquisa faz com que o índice seja reconstruído

Na primeira vez que um índice em texto completo é associado a uma lista de propriedades de pesquisa, o índice tem de ser repovoado para indexar termos de pesquisa específicos da propriedade. Os dados do índice existentes não estão truncados.

No entanto, se associar o índice de texto completo a uma lista de propriedades diferente, o índice é reconstruído. Reconstruir trunca imediatamente o índice do texto completo, removendo todos os dados existentes, e o índice tem de ser repovoado. À medida que a população avança, consultas em texto completo na tabela base pesquisam apenas nas linhas da tabela que já foram indexadas pela população. Os dados do índice repovoados incluem metadados das propriedades registadas da lista de propriedades de pesquisa recentemente adicionada.

Cenários que causam reconstrução incluem:

  • Mude diretamente para uma lista de propriedades de pesquisa diferente (ver "Cenário A", mais adiante nesta secção).

  • Desligue a lista de propriedades de pesquisa e, mais tarde, associe o índice a qualquer lista de propriedades de pesquisa (ver "Cenário B", mais adiante nesta secção).

Observação

Para mais informações sobre como a pesquisa em texto completo funciona com listas de propriedades de pesquisa, consulte Pesquisar Propriedades de Documentos com Listas de Propriedades de Pesquisa. Para informações sobre populações completas, consulte Populate Full-Text Indexes.

Cenário A: Mudar diretamente para uma lista de propriedades de pesquisa diferente

  1. É criado table_1 um índice em texto completo com uma lista spl_1de propriedades de pesquisa :

    CREATE FULLTEXT INDEX ON table_1 (column_name) KEY INDEX unique_key_index
        WITH SEARCH PROPERTY LIST=spl_1,
        CHANGE_TRACKING OFF, NO POPULATION;
    
  2. Uma população completa é executada no índice do texto completo:

    ALTER FULLTEXT INDEX ON table_1 START FULL POPULATION;
    
  3. O índice em texto completo é posteriormente associado a uma lista de propriedades de pesquisa diferente, spl_2, usando a seguinte afirmação:

    ALTER FULLTEXT INDEX ON table_1 SET SEARCH PROPERTY LIST spl_2;
    

    Esta afirmação provoca uma população completa, o comportamento padrão. No entanto, antes de iniciar esta população, o Full-Text Engine trunca automaticamente o índice.

Cenário B: Desligue a lista de propriedades de pesquisa e depois associe o índice a qualquer lista de propriedades de pesquisa

  1. É criado table_1 um índice em texto completo com uma lista spl_1de propriedades de pesquisa , seguida de uma população automática completa (o comportamento padrão):

    CREATE FULLTEXT INDEX ON table_1 (column_name) KEY INDEX unique_key_index
        WITH SEARCH PROPERTY LIST=spl_1;
    
  2. A lista de propriedades de pesquisa está desligada, da seguinte forma:

    ALTER FULLTEXT INDEX ON table_1
        SET SEARCH PROPERTY LIST OFF WITH NO POPULATION;
    
  3. O índice de texto completo está novamente associado à mesma lista de propriedades de pesquisa ou a uma diferente.

    Por exemplo, a seguinte instrução reassocia o índice de texto completo à lista original de propriedades de pesquisa, spl_1:

    ALTER FULLTEXT INDEX ON table_1 SET SEARCH PROPERTY LIST spl_1;
    

    Esta afirmação inicia uma população completa, o comportamento padrão.

    Observação

    A reconstrução também seria necessária para uma lista de propriedades de pesquisa diferente, como spl_2.

Permissions

O utilizador deve ter permissão ALTER na tabela ou na vista indexada, ou ser membro do papel fixo de servidor sysadmin , ou dos papéis fixos de base de dados db_ddladmin ou db_owner .

Se o SET STOPLIST for especificado, o utilizador deve ter permissão de REFERÊNCIAS na stoplist. Se for especificado SET SEARCH PROPERTY LIST, o utilizador deve ter permissão REFERENCES na lista de propriedades de pesquisa. O proprietário da lista de stoplist ou pesquisa de propriedades especificada pode conceder permissão para REFERÊNCIAS, se tiver permissões para ALTERAR CATÁLOGO DE TEXTO COMPLETO.

Observação

O público recebe permissão de REFERÊNCIAS para o stoplist padrão que é fornecido com o SQL Server.

Examples

A. Definir o rastreamento manual de alterações

O exemplo seguinte define o acompanhamento manual de alterações no índice de texto completo da JobCandidate tabela.

USE AdventureWorks2022;
GO
ALTER FULLTEXT INDEX ON HumanResources.JobCandidate
   SET CHANGE_TRACKING MANUAL;
GO

B. Associe uma lista de propriedades a um índice de texto completo

Aplica-se a: SQL Server 2012 (11.x) e versões posteriores.

O exemplo seguinte associa a lista de DocumentPropertyList propriedades ao índice de texto completo na Production.Document tabela. Esta instrução ALTER FULLTEXT INDEX inicia uma população completa, que é o comportamento padrão da cláusula SET SEARCH PROPERTY LISTE.

Observação

Para um exemplo que cria a lista de DocumentPropertyList propriedades, veja CRIAR LISTA DE PROPRIEDADES DE PESQUISA (Transact-SQL).

USE AdventureWorks2022;
GO
ALTER FULLTEXT INDEX ON Production.Document
   SET SEARCH PROPERTY LIST DocumentPropertyList;
GO

C. Remover uma lista de propriedades de pesquisa

Aplica-se a: SQL Server 2012 (11.x) e versões posteriores.

O exemplo seguinte remove a DocumentPropertyList lista de propriedades do índice de texto completo no Production.Document. Neste exemplo, não há pressa em remover as propriedades do índice, por isso a opção SEM POPULAÇÃO é especificada. No entanto, a pesquisa ao nível da propriedade já não é permitida contra este índice de texto completo.

USE AdventureWorks2022;
GO
ALTER FULLTEXT INDEX ON Production.Document
   SET SEARCH PROPERTY LIST OFF WITH NO POPULATION;
GO

D. Iniciar uma população completa

O exemplo seguinte inicia uma população completa no índice de texto completo na JobCandidate tabela.

USE AdventureWorks2022;
GO
ALTER FULLTEXT INDEX ON HumanResources.JobCandidate
   START FULL POPULATION;
GO

Consulte também