Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Aplica-se a:SQL Server
Banco de Dados SQL do Azure
Instância Gerenciada SQL do Azure
Este artigo descreve como criar, preencher e gerenciar índices de texto completo no SQL Server.
Criar um catálogo de texto completo
Antes de criar um índice de texto completo, você precisa ter um catálogo de texto completo. O catálogo é um contêiner virtual para um ou mais índices de texto completo. Para obter mais informações, consulte Criar e gerenciar catálogos Full-Text.
Criar, alterar ou soltar um índice de texto completo
- CRIAR ÍNDICE DE TEXTO COMPLETO (Transact-SQL)
- ALTERAR ÍNDICE DE TEXTO COMPLETO (Transact-SQL)
- DROP ÍNDICE DO TEXTO COMPLETO (Transact-SQL)
Preencher um índice de texto completo
O processo de criação e manutenção de um índice de texto completo é denominado população (também conhecido como rastreamento). Existem três tipos de população de índice de texto completo:
- População total
- População baseada no rastreio de alterações
- População incremental baseada num carimbo temporal.
Para obter mais informações, consulte Preencher índices de Full-Text.
Exibir as propriedades de um índice de texto completo
Exibir as propriedades de um índice de texto completo com Transact-SQL
| Exibição de catálogo ou gerenciamento dinâmico | Descrição |
|---|---|
| sys.fulltext_index_catalog_usages (Transact-SQL) | Retorna uma linha para cada catálogo de texto completo para referência de índice de texto completo. |
| sys.fulltext_index_columns (Transact-SQL) | Contém uma linha para cada coluna que faz parte de um índice de texto completo. |
| sys.fulltext_index_fragments (Transact-SQL) | Um índice de texto completo usa tabelas internas chamadas fragmentos de índice de texto completo para armazenar os dados de índice invertido. Essa exibição pode ser usada para consultar os metadados sobre esses fragmentos. Esta vista contém uma linha para cada fragmento de índice de texto completo em cada tabela que contém um índice de texto completo. |
| sys.fulltext_indexes (Transact-SQL) | Contém uma linha por índice de texto completo de um objeto tabular. |
| sys.dm_fts_index_keywords (Transact-SQL) | Retorna informações sobre o conteúdo de um índice de texto completo para a tabela especificada. |
| sys.dm_fts_index_keywords_by_document (Transact-SQL) | Retorna informações sobre o conteúdo no nível de documento de um índice de texto completo para a tabela especificada. Uma determinada palavra-chave pode aparecer em vários documentos. |
| sys.dm_fts_index_population (Transact-SQL) | Retorna informações sobre as populações de índice de texto completo atualmente em andamento. |
Exibir as propriedades de um índice de texto completo com o SQL Server Management Studio
Observação
Para exibir propriedades de índices de texto completo para bancos de dados SQL do Azure, use Transact-SQL.
No SQL Server Management Studio, no Pesquisador de Objetos, expanda o servidor.
Expanda Bancos de Dadose, em seguida, expanda o banco de dados que contém o índice de texto completo.
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, selecione Propriedades. Isso abre a caixa de diálogo Propriedades do índice de texto completo.
No painel Selecionar uma página, você pode selecionar qualquer uma das seguintes páginas:
Página Descrição Geral Exibe propriedades básicas do índice de texto completo. Isso inclui várias propriedades modificáveis e muitas propriedades inalteráveis, como nome do banco de dados, nome da tabela e o nome da coluna de chave de texto completo. As propriedades modificáveis são:
Full-Text Índice Stoplist
Full-Text Indexação ativada
de controle de alterações
Pesquisar Lista de PropriedadesColunas Exibe as colunas da tabela que estão disponíveis para indexação de texto completo. A coluna ou colunas selecionadas são indexadas em texto completo. Você pode selecionar quantas colunas disponíveis quiser incluir no índice de texto completo. Para obter mais informações, consulte Preencher índices Full-Text. 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 para as populações de índice de texto completo. Para obter mais informações, consulte Preencher índices Full-Text.
Nota: Depois de sair da caixa de diálogo Propriedades do ÍndiceFull-Text, qualquer agenda recém-criada é associada a um trabalho do SQL Server Agent (Iniciar População de Tabela Incremental em database_name.table_name).Selecione OK para salvar as alterações e sair da caixa de diálogo Propriedades do índice de texto completo.
Exibir as propriedades de tabelas e colunas indexadas
Várias funções Transact-SQL, como OBJECTPROPERTYEX, podem ser usadas para obter o valor de várias propriedades de indexação de texto completo. Essas informações são úteis para administrar e solucionar problemas de pesquisa de texto completo.
A tabela a seguir lista as propriedades de texto completo relacionadas a tabelas e colunas indexadas e suas funções Transact-SQL relacionadas.
| Propriedade | Descrição | Função |
|---|---|---|
| FullTextTypeColumn | A coluna TYPE na tabela que contém as informações do tipo de documento da coluna. | COLUMNPROPERTY |
| IsFulltextIndexed | Se uma coluna foi habilitada para indexação de texto completo. | COLUMNPROPERTY |
| IsFulltextKey | Se o índice é a chave de texto completo de uma tabela. | INDEXPROPERTY |
| TableFulltextBackgroundUpdateIndexOn | Se uma tabela tem indexação de texto completo com atualização em segundo plano. | OBJECTPROPERTYEX |
| TableFulltextCatalogId | ID do catálogo de texto completo no qual residem os dados de índice de texto completo da tabela. | OBJECTPROPERTYEX |
| TableFulltextChangeTrackingOn | Se uma tabela tem o controle de alterações de texto completo habilitado. | OBJECTPROPERTYEX |
| TableFulltextDocsProcessed | Número de linhas processadas desde o início da indexação de texto completo. | OBJECTPROPERTYEX |
| ContagemFalhasTextoCompletoTabela | Número de linhas que a pesquisa Full-Text não indexou. | OBJECTPROPERTYEX |
| ContagemDeItensTextoCompletoDaTabela | Número de linhas que foram indexadas com êxito em texto completo. | OBJECTPROPERTYEX |
| TableFulltextKeyColumn | O ID da coluna de chave única do texto completo. | OBJECTPROPERTYEX |
| TableFullTextMergeStatus | Se uma tabela que tem um índice de texto completo está atualmente em processo de junção. | OBJECTPROPERTYEX |
| TextoCompletoTabelaAlteraçõesPendentes | Número de entradas pendentes de rastreamento de alterações a processar. | OBJECTPROPERTYEX |
| TableFulltextPopulateStatus | Status da população de uma tabela de texto completo. | OBJECTPROPERTYEX |
| TableHasActiveFulltextIndex | Se uma tabela tem um índice de texto completo ativo. | OBJECTPROPERTYEX |
Obter informações sobre a coluna de chave de texto completo
Normalmente, o resultado das funções com valor de conjunto de linhas CONTAINSTABLE ou FREETEXTTABLE precisa ser unido à tabela base. Nesses casos, precisas saber o nome exclusivo da coluna de chave. Você pode perguntar se um determinado índice exclusivo é usado como a chave de texto completo e pode obter o identificador da coluna de chave de texto completo.
Determinar se um determinado índice exclusivo é usado como coluna de chave de texto completo
Use uma instrução SELECT para chamar a função INDEXPROPERTY. Na chamada de função, use a função OBJECT_ID para converter o nome da tabela (table_name) na ID da tabela, especifique o nome de um índice exclusivo para a tabela e especifique a IsFulltextKey propriedade index, da seguinte maneira:
SELECT INDEXPROPERTY(OBJECT_ID('table_name'), 'index_name', 'IsFulltextKey');
Esta instrução retorna 1 se o índice for usado para assegurar a unicidade da coluna chave de texto completo e 0 se não for.
Exemplo
O exemplo a seguir pergunta se o índice PK_Document_DocumentNode é usado para impor a exclusividade da coluna de chave de texto completo, da seguinte maneira:
USE AdventureWorks2022;
GO
SELECT INDEXPROPERTY(OBJECT_ID('Production.Document'), 'PK_Document_DocumentNode', 'IsFulltextKey');
Este exemplo retornará 1 se o índice PK_Document_DocumentNode for usado para impor a exclusividade da coluna de chave de texto completo. Caso contrário, ele retorna 0 ou NULL. NULL implica que você está usando um nome de índice inválido, o nome do índice não corresponde à tabela, a tabela não existe ou assim por diante.
Localizar o identificador da coluna de chave de texto completo
Cada tabela ativada para texto completo tem uma coluna que é usada para assegurar linhas exclusivas para a tabela (a coluna de chave única ). A propriedade TableFulltextKeyColumn, obtida da função OBJECTPROPERTYEX, contém o ID da coluna de chave exclusiva.
Para obter esse identificador, você pode usar uma instrução SELECT para chamar a função OBJECTPROPERTYEX. Use a função OBJECT_ID para converter o nome da tabela (table_name) no ID da tabela e especifique a propriedade TableFulltextKeyColumn, da seguinte maneira:
SELECT OBJECTPROPERTYEX(OBJECT_ID('table_name'), 'TableFulltextKeyColumn' ) AS 'Column Identifier';
Exemplos
O exemplo a seguir retorna o identificador da coluna de chave de texto completo ou NULL. NULL implica que você está usando um nome de índice inválido, o nome do índice não corresponde à tabela, a tabela não existe ou assim por diante.
USE AdventureWorks2022;
GO
SELECT OBJECTPROPERTYEX(OBJECT_ID('Production.Document'), 'TableFulltextKeyColumn');
GO
O exemplo a seguir mostra como usar o identificador da coluna de chave exclusiva para obter o nome da coluna.
USE AdventureWorks2022;
GO
DECLARE @key_column SYSNAME
SET @key_column = COL_NAME(OBJECT_ID('Production.Document'),
OBJECTPROPERTYEX(OBJECT_ID('Production.Document'), 'TableFulltextKeyColumn'));
SELECT @key_column AS 'Unique Key Column';
GO
Este exemplo retorna uma coluna de conjunto de resultados chamada Unique Key Column, que exibe uma única linha contendo o nome da coluna de chave exclusiva da tabela Document, DocumentNode. Se essa consulta contivesse um nome de índice inválido, o nome do índice não correspondesse à tabela, a tabela não existisse e assim por diante, ela retornaria NULL.
Índice varbinary(max) e colunas XML
Se uma coluna varbinary(max), varbinaryou xml tiver um índice de texto completo, ela poderá ser consultada usando os predicados de texto completo (CONTAINS e FREETEXT) e funções (CONTAINSTABLE e FREETEXTTABLE), como qualquer outra coluna indexada de texto completo.
Dados de índice varbinary(max) ou varbinary
Um único coluna varbinary(max) ou varbinary pode armazenar muitos tipos de documentos. O SQL Server dá suporte a qualquer tipo de documento para o qual um filtro está instalado e disponível no sistema operativo. O tipo de documento de cada documento é identificado pela extensão de arquivo do documento. Por exemplo, para uma extensão de arquivo .doc, a pesquisa de texto completo usa o filtro que oferece suporte a documentos do Microsoft Word. Para obter uma lista dos tipos de documentos disponíveis, consulte a exibição de catálogo sys.fulltext_document_types.
O Full-Text Engine pode usar filtros existentes instalados no sistema operacional. Antes de usar filtros do sistema operacional, separadores de palavras e lematizadores, você deve carregá-los na instância do servidor, da seguinte maneira:
EXEC sp_fulltext_service @action = 'load_os_resources', @value = 1;
Para criar um índice de texto completo numa coluna de varbinary(max), o Full-Text Engine precisa acessar as extensões de arquivo dos documentos na coluna varbinary(max). Essas informações devem ser armazenadas em uma coluna de tabela, chamada coluna de tipo, que deve ser associada à coluna varbinary(max) no índice de texto completo. Ao indexar um documento, o mecanismo de Full-Text usa a extensão de arquivo na coluna de tipo para identificar qual filtro usar.
Indexar dados XML
Uma coluna de tipo de dados xml armazena apenas documentos XML e fragmentos, e somente o filtro XML é usado para os documentos. Portanto, uma coluna de tipo é desnecessária. Nas colunas xml, o índice de texto completo indexa o conteúdo dos elementos XML, mas ignora a marcação XML. Os valores de atributo são indexados em texto completo, a menos que sejam valores numéricos. As tags de elemento são usadas como limites de token. São suportados documentos XML ou HTML bem formados e fragmentos contendo várias linguagens.
Para mais informações sobre indexação e consulta em uma coluna xml, veja Usar Full-Text Pesquisa com Colunas XML.
Desativar ou reativar a indexação de texto completo para uma tabela
No SQL Server, todos os bancos de dados criados pelo usuário são habilitados de texto completo por padrão. Além disso, uma tabela individual é automaticamente habilitada para indexação de texto completo assim que um índice de texto completo é criado nela e uma coluna é adicionada ao índice. Uma tabela é automaticamente desativada para indexação de texto completo quando a última coluna é descartada de seu índice de texto completo.
Numa tabela que tenha um índice de texto completo, pode-se desabilitar ou habilitar manualmente uma tabela para indexação de texto completo usando o SQL Server Management Studio.
Expanda o grupo de servidores, expanda Bancos de Dadose expanda o banco de dados que contém a tabela que você deseja habilitar para indexação de texto completo.
Expanda Tabelase clique com o botão direito do rato na tabela que pretende desativar ou reativar para indexação de texto completo.
Selecione Full-Text índicee, em seguida, selecione Desativar Full-Text índice ou Ativar Full-Text índice.
Remover um índice de texto completo de uma tabela
No Pesquisador de Objetos, clique com o botão direito do mouse na tabela que tem o índice de texto completo que você deseja excluir.
Selecione Excluir Full-Text índice.
Quando solicitado, selecione OK para confirmar que deseja excluir o índice de texto completo.