Pesquisa de Texto CompletoFull-Text Search

A Pesquisa de Texto Completo no SQL ServerSQL Server e Banco de dados SQL do AzureAzure SQL Database permite que usuários e aplicativos executem consultas de texto completo em dados baseados em caracteres nas tabelas do SQL ServerSQL Server .Full-Text Search in SQL ServerSQL Server and Banco de dados SQL do AzureAzure SQL Database lets users and applications run full-text queries against character-based data in SQL ServerSQL Server tables.

Tarefas básicasBasic tasks

Este tópico fornece uma visão geral da pesquisa de texto completo e descreve sua arquitetura e seus componentes.This topic provides an overview of Full-Text Search and describes its components and its architecture. Se você preferir começar imediatamente, aqui estarão as tarefas básicas.If you prefer to get started right away, here are the basic tasks.

Observação

Full-Text Search is an optional component of the SQL ServerSQL Server .Full-Text Search is an optional component of the SQL ServerSQL Server Database Engine. Se você não selecionou a pesquisa de texto completo quando instalou o SQL Server, execute a instalação do SQL Server novamente para adicioná-la.If you didn't select Full-Text Search when you installed SQL Server, run SQL Server Setup again to add it.

Visão geralOverview

Um índice de texto completo inclui uma ou mais colunas baseadas em caractere em uma tabela.A full-text index includes one or more character-based columns in a table. Essas colunas podem ter qualquer um destes tipos de dados: char, varchar, nchar, nvarchar, text, ntext, image, xml ou varbinary(max) e FILESTREAM.These columns can have any of the following data types: char, varchar, nchar, nvarchar, text, ntext, image, xml, or varbinary(max) and FILESTREAM. Cada índice de texto completo indexa uma ou mais colunas da tabela base, e cada coluna pode usar um idioma específico.Each full-text index indexes one or more columns from the table, and each column can use a specific language.

As consultas de texto completo executam pesquisas linguísticas nos dados de texto em índices de texto completo trabalhando em palavras e frases com base em regras de um idioma específico, como inglês ou japonês.Full-text queries perform linguistic searches against text data in full-text indexes by operating on words and phrases based on the rules of a particular language such as English or Japanese. As consultas de texto completo podem incluir palavras e frases simples ou várias formas de uma palavra ou frase.Full-text queries can include simple words and phrases or multiple forms of a word or phrase. Uma consulta de texto completo retorna todos os documentos que contiverem, pelo menos, uma correspondência (também conhecida como uma ocorrência).A full-text query returns any documents that contain at least one match (also known as a hit). Uma correspondência ocorre quando um documento de destino contém todos os termos especificados na consulta de texto completo e atende a quaisquer outros critérios de pesquisa, como a distância entre os termos correspondentes.A match occurs when a target document contains all the terms specified in the full-text query, and meets any other search conditions, such as the distance between the matching terms.

Consultas da pesquisa de texto completo Full-Text Search queries

Depois que colunas forem adicionadas a um índice de texto completo, os usuários e aplicativos poderão executar consultas de texto completo no texto das colunas.After columns have been added to a full-text index, users and applications can run full-text queries on the text in the columns. Essas consultas podem procurar qualquer um dos seguintes itens:These queries can search for any of the following:

  • Uma ou mais palavras ou frases específicas (termo simples)One or more specific words or phrases (simple term)

  • Uma palavra ou frase na qual as palavras começam com o texto especificado (termo de prefixo)A word or a phrase where the words begin with specified text (prefix term)

  • As formas flexionadas de uma palavra específica (termo de geração)Inflectional forms of a specific word (generation term)

  • Uma palavra ou frase perto de outra palavra ou frase (termo de proximidade).A word or phrase close to another word or phrase (proximity term)

  • Os sinônimos de uma palavra específica (dicionário de sinônimos)Synonymous forms of a specific word (thesaurus)

  • Palavras ou frases que usam valores ponderados (termo ponderado)Words or phrases using weighted values (weighted term)

    As consultas de texto completo não diferenciam maiúsculas de minúsculas.Full-text queries are not case-sensitive. Por exemplo, a pesquisa de "Alumínio" ou "alumínio" retorna os mesmos resultados.For example, searching for "Aluminum" or "aluminum" returns the same results.

    As consultas de texto completo usam um pequeno conjunto de predicados Transact-SQLTransact-SQL (CONTAINS e FREETEXT) e funções (CONTAINSTABLE e FREETEXTTABLE).Full-text queries use a small set of Transact-SQLTransact-SQL predicates (CONTAINS and FREETEXT) and functions (CONTAINSTABLE and FREETEXTTABLE). Entretanto, as metas de pesquisa de um determinado cenário comercial influenciam a estrutura das consultas de texto completo.However, the search goals of a given business scenario influence the structure of the full-text queries. Por exemplo:For example:

  • E-business — procurar por um produto em um site:e-business—searching for a product on a website:

    SELECT product_id   
    FROM products   
    WHERE CONTAINS(product_description, ”Snap Happy 100EZ” OR FORMSOF(THESAURUS,’Snap Happy’) OR ‘100EZ’)   
    AND product_cost < 200 ;  
    
  • Cenário de recrutamento — procurar candidatos a uma vaga de trabalho que tenham experiência prática com o SQL ServerSQL Server:Recruitment scenario—searching for job candidates that have experience working with SQL ServerSQL Server:

    SELECT candidate_name,SSN   
    FROM candidates   
    WHERE CONTAINS(candidate_resume,”SQL Server”) AND candidate_division =DBA;  
    

    Para obter mais informações, veja Consulta com pesquisa de texto completo.For more information, see Query with Full-Text Search.

Compare as consultas de pesquisa de texto completo para o predicado LIKE Compare Full-Text Search queries to the LIKE predicate

Ao contrário da pesquisa de texto completo, o predicado LIKE Transact-SQLTransact-SQL funciona apenas com padrões de caracteres.In contrast to full-text search, the LIKE Transact-SQLTransact-SQL predicate works on character patterns only. Além disso, não é possível usar o predicado LIKE para consultar dados binários formatados.Also, you cannot use the LIKE predicate to query formatted binary data. Além disso, uma consulta LIKE feita em uma grande quantidade de dados de texto não estruturados é bem mais lenta do que uma consulta de texto completo equivalente feita nos mesmos dados.Furthermore, a LIKE query against a large amount of unstructured text data is much slower than an equivalent full-text query against the same data. Uma consulta LIKE executada em milhões de linhas de dados de texto pode demorar muitos minutos, enquanto uma consulta de texto completo pode demorar alguns segundos ou menos para ser executada nos mesmos dados, dependendo do número de linhas retornadas.A LIKE query against millions of rows of text data can take minutes to return; whereas a full-text query can take only seconds or less against the same data, depending on the number of rows that are returned.

Arquitetura da pesquisa de texto completo Full-Text Search architecture

A arquitetura de pesquisa de texto completo é formada pelos seguintes processos:Full-text search architecture consists of the following processes:

  • O processo do SQL ServerSQL Server (sqlservr.exe).The SQL ServerSQL Server process (sqlservr.exe).

  • O processo de host do daemon de filtro (fdhost.exe).The filter daemon host process (fdhost.exe).

    Por motivos de segurança, os filtros são carregados por processos separados que são chamados de hosts do daemon de filtro.For security reasons, filters are loaded by separate processes called the filter daemon hosts. Os processos fdhost.exe são criados por um serviço Iniciador FDHOST (MSSQLFDLauncher) e executados sob as credenciais de segurança da conta deste serviço.The fdhost.exe processes are created by an FDHOST launcher service (MSSQLFDLauncher), and they run under the security credentials of the FDHOST launcher service account. Por isso, o serviço Iniciador FDHOST deve estar em execução para que a indexação de texto completo e a consulta de texto completo funcionem.Therefore, the FDHOST launcher service must be running for full-text indexing and full-text querying to work. Para obter informações sobre como configurar a conta de serviço para esse serviço, veja Definir a conta de serviço do Iniciador do Daemon de Filtro de Texto Completo.For information about setting the service account for this service, see Set the Service Account for the Full-text Filter Daemon Launcher.

    Esses dois processos contêm os componentes da arquitetura de pesquisa de texto completo.These two processes contain the components of the full-text search architecture. Esses componentes e suas relações são resumidas na ilustração a seguir.These components and their relationships are summarized in the following illustration. Os componentes são descritos após a ilustração.The components are described after the illustration.

    Arquitetura de pesquisa de texto completofull-text search architecture

Processo do SQL Server SQL Server process

O processo do SQL ServerSQL Server usa os seguintes componentes na pesquisa de texto completo:The SQL ServerSQL Server process uses the following components for full-text search:

  • Tabelas de usuário.User tables. Essas tabelas contêm os dados para serem indexados com texto completo.These tables contain the data to be full-text indexed.

  • Gatherer de texto completo.Full-text gatherer. O gatherer de texto completo funciona com os threads de rastreamento de texto completo.The full-text gatherer works with the full-text crawl threads. Ele é responsável por agendar e orientar a população de índices de texto completo e também por monitorar os catálogos de texto completo.It is responsible for scheduling and driving the population of full-text indexes, and also for monitoring full-text catalogs.

  • Arquivos de dicionário de sinônimos.Thesaurus files. Esses arquivos contêm sinônimos de termos de pesquisa.These files contain synonyms of search terms. Para obter mais informações, veja Configurar e gerenciar arquivos de dicionário de sinônimos para pesquisa de texto completo.For more information, see Configure and Manage Thesaurus Files for Full-Text Search.

  • Objetos da lista de palavras irrelevantes (stoplist).Stoplist objects. Os objetos da lista de palavras irrelevantes contêm uma lista de palavras comuns que não são úteis para a pesquisa.Stoplist objects contain a list of common words that are not useful for the search. Para obter mais informações, veja Configurar e gerenciar palavras irrelevantes e listas de palavras irrelevantes para pesquisa de texto completo.For more information, see Configure and Manage Stopwords and Stoplists for Full-Text Search.

  • SQL ServerSQL Server processador de consultas. SQL ServerSQL Server query processor. O processador de consulta compila e executa consultas SQL.The query processor compiles and executes SQL queries. Se uma consulta SQL incluir uma consulta de pesquisa de texto completo, a consulta será enviada ao Mecanismo de Texto Completo, durante a compilação e durante a execução.If a SQL query includes a full-text search query, the query is sent to the Full-Text Engine, both during compilation and during execution. O resultado da consulta é comparado com o índice de texto completo.The query result is matched against the full-text index.

  • Mecanismo de Texto Completo.Full-Text Engine. O Mecanismo de Texto Completo do SQL ServerSQL Server está totalmente integrado ao processador de consultas.The Full-Text Engine in SQL ServerSQL Server is fully integrated with the query processor. O Mecanismo de Texto Completo compila e executa consultas de texto completo.The Full-Text Engine compiles and executes full-text queries. Como parte da execução da consulta, o Mecanismo de Texto Completo pode receber entrada do dicionário de sinônimos e da lista de palavras irrelevantes.As part of query execution, the Full-Text Engine might receive input from the thesaurus and stoplist.

    Observação

    No SQL Server 2008SQL Server 2008 e em versões posteriores, o Mecanismo de Texto Completo reside no processo do SQL ServerSQL Server e não em um serviço separado.In SQL Server 2008SQL Server 2008 and later versions, the Full-Text Engine resides in the SQL ServerSQL Server process, rather than in a separate service. 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.Integrating the Full-Text Engine into the Database Engine improved full-text manageability, optimization of mixed query, and overall performance.

  • Gravador de índice (indexador).Index writer (indexer). O gravador de índice cria a estrutura usada para armazenar os tokens indexados.The index writer builds the structure that is used to store the indexed tokens.

  • Gerenciador de daemon de filtro.Filter daemon manager. O gerenciador de daemon de filtro é responsável por monitorar o status do host do daemon de filtro do Mecanismo de Texto Completo.The filter daemon manager is responsible for monitoring the status of the Full-Text Engine filter daemon host.

Filter Daemon Host process Filter Daemon Host process

O host do daemon de filtro é um processo que é iniciado pelo Mecanismo de Texto Completo.The filter daemon host is a process that is started by the Full-Text Engine. Ele executa os seguintes componentes de pesquisa de texto completo que são responsáveis por acessar, filtrar e separar palavras de dados de tabelas, bem como por separar palavras e lematizar a entrada da consulta.It runs the following full-text search components, which are responsible for accessing, filtering, and word breaking data from tables, as well as for word breaking and stemming the query input.

Os componentes do host do daemon de filtro são os seguintes:The components of the filter daemon host are as follows:

  • Manipulador de protocolo.Protocol handler. Esse componente extrai os dados da memória para processamento adicional e acessa dados de uma tabela de usuário de um banco de dados especificado.This component pulls the data from memory for further processing and accesses data from a user table in a specified database. Uma de suas responsabilidades é coletar dados das colunas que estão sendo indexadas com texto completo e transmiti-los ao host do daemon de filtro, que aplicará a filtragem e o separador de palavras conforme exigido.One of its responsibilities is to gather data from the columns being full-text indexed and pass it to the filter daemon host, which will apply filtering and word breaker as required.

  • Filtros.Filters. Alguns tipos de dados requerem filtragem para que os dados contidos em um documento possam ser indexados com texto completo, inclusive dados em colunas varbinary, varbinary(max), imageou xml .Some data types require filtering before the data in a document can be full-text indexed, including data in varbinary, varbinary(max), image, or xml columns. O filtro usado para um dado documento depende de seu tipo de documento.The filter used for a given document depends on its document type. Por exemplo, são usados filtros diferentes para documentos do Microsoft Word (.doc), do Microsoft Excel (.xls) e no formato XML (.xml).For example, different filters are used for Microsoft Word (.doc) documents, Microsoft Excel (.xls) documents, and XML (.xml) documents. O filtro extrai partes de texto do documento, removendo a formatação inserida e mantendo o texto e, potencialmente, as informações sobre a posição deste.Then the filter extracts chunks of text from the document, removing embedded formatting and retaining the text and, potentially, information about the position of the text. O resultado é um fluxo de informações textuais.The result is a stream of textual information. Para obter mais informações, veja Configurar e gerenciar filtros para pesquisa.For more information, see Configure and Manage Filters for Search.

  • Separadores de palavras e lematizadores.Word breakers and stemmers. Um separador de palavras é um componente específico a um idioma que encontra limites de palavras com base nas regras lexicais de determinado idioma (separação de palavras).A word breaker is a language-specific component that finds word boundaries based on the lexical rules of a given language (word breaking). Cada separador de palavras é associado a um componente lematizador específico do idioma, que conjuga verbos e executa expansões flexionadas.Each word breaker is associated with a language-specific stemmer component that conjugates verbs and performs inflectional expansions. No momento da indexação, o host do daemon de filtro usa um separador de palavras e um lematizador para executar a análise linguística dos dados textuais de uma determinada coluna de tabela.At indexing time, the filter daemon host uses a word breaker and stemmer to perform linguistic analysis on the textual data from a given table column. O idioma associado a uma coluna de tabela no índice de texto completo determina qual separador de palavras e qual lematizador são usados para indexar a coluna.The language that is associated with a table column in the full-text index determines which word breaker and stemmer are used for indexing the column. Para obter mais informações, veja Configurar e gerenciar separadores de palavras e lematizadores para pesquisa.For more information, see Configure and Manage Word Breakers and Stemmers for Search.

Processamento da pesquisa de texto completo Full-Text Search processing

A pesquisa de texto completo é ativada pelo Mecanismo de Texto Completo.Full-text search is powered by the Full-Text Engine. O Mecanismo de Texto Completo tem duas funções: suporte a indexação e suporte a consulta.The Full-Text Engine has two roles: indexing support and querying support.

Processo de indexação de texto completo Full-Text indexing process

Quando uma população de texto completo (também conhecida como rastreamento) é iniciada, o mecanismo de texto completo entrega grandes lotes de dados à memória e notifica o host do daemon de filtro.When a full-text population (also known as a crawl) is initiated, the Full-Text Engine pushes large batches of data into memory and notifies the filter daemon host. O host filtra e o Word divide os dados e converte os dados convertidos em listas de palavras invertidas.The host filters and word breaks the data and converts the converted data into inverted word lists. A pesquisa de texto completo pega os dados convertidos nas listas de palavras, processa-os para remover palavras irrelevantes e mantém as listas de palavras para um lote em um ou mais índices invertidos.The full-text search then pulls the converted data from the word lists, processes the data to remove stopwords, and persists the word lists for a batch into one or more inverted indexes.

Durante a indexação de dados armazenados em uma coluna varbinary(max) ou image , o filtro, que implementa a interface IFilter , extrai texto com base no formato de arquivo especificado para aqueles dados (por exemplo, MicrosoftMicrosoft Word).When indexing data stored in a varbinary(max) or image column, the filter, which implements the IFilter interface, extracts text based on the specified file format for that data (for example, MicrosoftMicrosoft Word). Em alguns casos, os componentes de filtro exigem que os dados de varbinary(max)ou image sejam gravados fora da pasta de dados do filtro, em vez de serem postos na memória.In some cases, the filter components require the varbinary(max), or image data to be written out to the filterdata folder, instead of being pushed into memory.

Como parte do processamento, os dados de texto reunidos são passados por um separador de palavras para que o texto seja separado em tokens individuais ou palavras-chave.As part of processing, the gathered text data is passed through a word breaker to separate the text into individual tokens, or keywords. A linguagem usada para geração de tokens é especificada no nível da coluna, podendo ser identificada em dados varbinary(max), imageou xml , pelo componente de filtro.The language used for tokenization is specified at the column level, or can be identified within varbinary(max), image, or xml data by the filter component.

Processamentos adicionais podem ser realizados para remover palavras irrelevantes e para normalizar os tokens antes de eles serem armazenados no índice de texto completo ou em um fragmento de índice.Additional processing may be performed to remove stopwords, and to normalize tokens before they are stored in the full-text index or an index fragment.

Quando a população for concluída, um processo de mesclagem final será disparado, mesclando os fragmentos de índice em um índice de texto completo mestre.When a population has completed, a final merge process is triggered that merges the index fragments together into one master full-text index. Isso resulta em desempenho aprimorado de consultas, uma vez que apenas o índice precisa ser consultado, em vez de uma série de fragmentos de índice, e melhores estatísticas de pontuação podem ser usadas para classificação de relevância.This results in improved query performance since only the master index needs to be queried rather than a number of index fragments, and better scoring statistics may be used for relevance ranking.

Processo de consulta de texto completo Full-Text querying process

O processador de consultas passa as partes do texto completo de uma consulta para o Mecanismo de Texto Completo para processamento.The query processor passes the full-text portions of a query to the Full-Text Engine for processing. O Mecanismo de Texto Completo executa a quebra de palavras e, opcionalmente, expansões do dicionário de sinônimos, lematização e processamento de palavras irrelevantes (palavras de ruído).The Full-Text Engine performs word breaking and, optionally, thesaurus expansions, stemming, and stopword (noise-word) processing. Em seguida, as partes de texto completo da consulta são representadas na forma de operadores SQL, principalmente como STVFs (funções com valor de tabela de fluxo).Then the full-text portions of the query are represented in the form of SQL operators, primarily as streaming table-valued functions (STVFs). Durante a execução da consulta, essas STVFs acessam o índice invertido para recuperar os resultados corretos.During query execution, these STVFs access the inverted index to retrieve the correct results. Os resultados são retornados para o cliente neste momento ou processados mais um pouco antes de serem retornados ao cliente.The results are either returned to the client at this point, or they are further processed before being returned to the client.

Arquitetura de índice de texto completoFull-text index architecture

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.The information in full-text indexes is used by the Full-Text Engine to compile full-text queries that can quickly search a table for particular words or combinations of words. 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.A full-text index stores information about significant words and their location within one or more columns of a database table. 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 ServerSQL Server.A full-text index is a special type of token-based functional index that is built and maintained by the Full-Text Engine for SQL ServerSQL Server. O processo de criação de um índice de texto completo é diferente da criação de outros tipos de índices.The process of building a full-text index differs from building other types of indexes. Em vez de criar uma estrutura de árvore B com base em um valor armazenado em uma linha específica, o Mecanismo de Texto Completo cria uma estrutura de índice compactada, empilhada e invertida com base em tokens individuais do texto que está sendo indexado.Instead of constructing a B-tree structure based on a value stored in a particular row, the Full-Text Engine builds an inverted, stacked, compressed index structure based on individual tokens from the text being indexed. O tamanho de um índice de texto completo é limitado apenas pelos recursos de memória disponíveis do computador no qual a instância do SQL ServerSQL Server está sendo executada.The size of a full-text index is limited only by the available memory resources of the computer on which the instance of SQL ServerSQL Server is running.

A partir do SQL Server 2008SQL Server 2008, os índices de texto completo são integrados ao Mecanismo de Banco de Dados e deixam de residir no sistema de arquivos, como ocorria nas versões anteriores do SQL ServerSQL Server.Beginning in SQL Server 2008SQL Server 2008, the full-text indexes are integrated with the Database Engine, instead of residing in the file system as in previous versions of SQL ServerSQL Server. Em um novo banco de dados, agora o catálogo de texto completo é um objeto virtual que não pertence a nenhum grupo de arquivos; ele é simplesmente um conceito lógico que faz referência a um grupo dos índices de texto completo.For a new database, the full-text catalog is now a virtual object that does not belong to any filegroup; it is merely a logical concept that refers to a group of the full-text indexes. Porém, observe que, durante a atualização de um banco de dados do SQL Server 2005SQL 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, veja Atualizar pesquisa de texto completo.Note, however, that during upgrade of a SQL Server 2005SQL Server 2005 database, any full-text catalog that contains data files, a new filegroup is created; for more information, see Upgrade Full-Text Search.

Só é permitido um índice de texto completo por tabela.Only one full-text index is allowed per table. Para que um índice de texto completo seja criado em uma tabela, a tabela deve ter uma única coluna não nula exclusiva.For a full-text index to be created on a table, the table must have a single, unique nonnull column. É possível criar um índice de texto completo em colunas do tipo char, varchar, nchar, nvarchar, text, ntext, image, xml, varbinarye varbinary(max) , que podem ser indexadas para a pesquisa de texto completo.You can build a full-text index on columns of type char, varchar, nchar, nvarchar, text, ntext, image, xml, varbinary, and varbinary(max) can be indexed for full-text search. A criação de um índice de texto completo em uma coluna cujo tipo de dados é varbinary, varbinary(max), imageou xml exige a especificação de uma coluna de tipo.Creating a full-text index on a column whose data type is varbinary, varbinary(max), image, or xml requires that you specify a type column. 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.A type column is a table column in which you store the file extension (.doc, .pdf, .xls, and so forth) of the document in each row.

Estrutura de índice de texto completo Full-text index structure

Um bom conhecimento da estrutura do índice de texto completo ajudará você a entender como funciona o Mecanismo de Texto Completo.A good understanding of the structure of a full-text index will help you understand how the Full-Text Engine works. Este tópico usa o trecho a seguir da tabela Document em Adventure WorksAdventure Works como tabela de exemplo.This topic uses the following excerpt of the Document table in Adventure WorksAdventure Works as an example table. Esse trecho mostra apenas duas colunas, DocumentID e Title , e três linhas da tabela.This excerpt shows only two columns, the DocumentID column and the Title column, and three rows from the table.

Para este exemplo, assumiremos que um índice de texto completo foi criado na coluna Title .For this example, we will assume that a full-text index has been created on the Title column.

DocumentIDDocumentID TitleTitle
11 Crank Arm and Tire MaintenanceCrank Arm and Tire Maintenance
22 Front Reflector Bracket and Reflector Assembly 3Front Reflector Bracket and Reflector Assembly 3
33 Front Reflector Bracket InstallationFront Reflector Bracket Installation

Por exemplo, a tabela a seguir, que mostra o Fragment 1, descreve o conteúdo do índice de texto completo criado na coluna Title da tabela Document .For example, the following table, which shows Fragment 1, depicts the contents of the full-text index created on the Title column of the Document table. Os índices de texto completo contêm mais informações do que é apresentado nessa tabela.Full-text indexes contain more information than is presented in this table. A tabela é uma representação lógica de um índice de texto completo e é fornecida somente para fins de demonstração.The table is a logical representation of a full-text index and is provided for demonstration purposes only. As linhas são armazenadas em um formato compactado para otimizar o uso do disco.The rows are stored in a compressed format to optimize disk usage.

Observe que os dados foram invertidos em relação aos documentos originais.Notice that the data has been inverted from the original documents. A inversão ocorre porque as palavras-chave são mapeadas para as IDs de documento.Inversion occurs because the keywords are mapped to the document IDs. Por esse motivo, geralmente um índice de texto completo é chamado de índice invertido.For this reason, a full-text index is often referred to as an inverted index.

Observe também que a palavra-chave "and" foi removida do índice de texto completo.Also notice that the keyword "and" has been removed from the full-text index. 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.This is done because "and" is a stopword, and removing stopwords from a full-text index can lead to substantial savings in disk space thereby improving query performance. Para obter mais informações sobre palavras irrelevantes, veja Configurar e gerenciar palavras irrelevantes (stop words) e listas de palavras irrelevantes para pesquisa de texto completo.For more information about stopwords, see Configure and Manage Stopwords and Stoplists for Full-Text Search.

Fragmento 1Fragment 1

Palavra-chaveKeyword ColIdColId DocIdDocId OcorrênciaOccurrence
CrankCrank 11 11 11
ArmArm 11 11 22
TireTire 11 11 44
ManutençãoMaintenance 11 11 55
FrontFront 11 22 11
FrontFront 11 33 11
ReflectorReflector 11 22 22
ReflectorReflector 11 22 55
ReflectorReflector 11 33 22
BracketBracket 11 22 33
BracketBracket 11 33 33
AssemblyAssembly 11 22 66
33 11 22 77
InstalaçãoInstallation 11 33 44

A coluna Keyword contém uma representação de um único token extraído no momento da indexação.The Keyword column contains a representation of a single token extracted at indexing time. Os separadores de palavras determinam o que compõe um token.Word breakers determine what makes up a token.

A coluna ColId contém um valor que corresponde a uma coluna específica indexada com texto completo.The ColId column contains a value that corresponds to a particular column that is full-text indexed.

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.The DocId column contains values for an eight-byte integer that maps to a particular full-text key value in a full-text indexed table. Esse mapeamento é necessário quando a chave de texto completo não é um tipo de dados integer.This mapping is necessary when the full-text key is not an integer data type. 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 de DocId.In such cases, mappings between full-text key values and DocId values are maintained in a separate table called the DocId Mapping table. Para examinar esses mapeamentos, use o procedimento armazenado do sistema sp_fulltext_keymappings .To query for these mappings use the sp_fulltext_keymappings system stored procedure. 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.To satisfy a search condition, DocId values from the above table need to be joined with the DocId Mapping table to retrieve rows from the base table being queried. 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.If the full-text key value of the base table is an integer type, the value directly serves as the DocId and no mapping is necessary. Por isso, o uso de valores de chave de texto completo pode ajudar a otimizar consultas de texto completo.Therefore, using integer full-text key values can help optimize full-text queries.

A coluna Occurrence contém um valor inteiro.The Occurrence column contains an integer value. 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 de DocId.For each DocId value, there is a list of occurrence values that correspond to the relative word offsets of the particular keyword within that 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.Occurrence values are useful in determining phrase or proximity matches, for example, phrases have numerically adjacent occurrence values. 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 DocId pode ser usado na pontuação.They are also useful in computing relevance scores; for example, the number of occurrences of a keyword in a DocId may be used in scoring.

Fragmentos de índice de texto completo Full-text index fragments

O índice de texto completo lógico normalmente é dividido entre várias tabelas internas.The logical full-text index is usually split across multiple internal tables. Cada tabela interna é chamada de fragmento de índice de texto completo.Each internal table is called a full-text index fragment. Alguns desses fragmentos podem conter dados mais novos do que outros.Some of these fragments might contain newer data than others. 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.For example, if a user updates the following row whose DocId is 3 and the table is auto change-tracked, a new fragment is created.

DocumentIDDocumentID TitleTitle
33 Refletor traseiroRear Reflector

No exemplo a seguir, que mostra o Fragmento 2, o fragmento contém dados mais recentes sobre DocId 3 em comparação com Fragmento 1.In the following example, which shows Fragment 2, the fragment contains newer data about DocId 3 compared to Fragment 1. Portanto, quando o usuário procura por “Refletor Traseiro", os dados de Fragmento 2 são usados para DocId 3.Therefore, when the user queries for "Rear Reflector" the data from Fragment 2 is used for DocId 3. Cada fragmento é marcado com um carimbo de data/hora da criação, que pode ser consultado usando a exibição de catálogo sys.fulltext_index_fragments .Each fragment is marked with a creation timestamp that can be queried by using the sys.fulltext_index_fragments catalog view.

Fragmento 2Fragment 2

Palavra-chaveKeyword ColIdColId DocIdDocId OccOcc
TraseiroRear 11 33 11
ReflectorReflector 11 33 22

Como pode ser visto no Fragmento 2, as consultas de texto completo precisam examinar cada fragmento internamente e descartar entradas mais antigas.As can be seen from Fragment 2, full-text queries need to query each fragment internally and discard older entries. 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.Therefore, too many full-text index fragments in the full-text index can lead to substantial degradation in query performance. 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-SQLTransact-SQL .To reduce the number of fragments, reorganize the fulltext catalog by using the REORGANIZE option of the ALTER FULLTEXT CATALOG Transact-SQLTransact-SQL statement. Essa instrução executa uma mesclagem mestraque mescla os fragmentos em um único fragmento maior e remove todas as entradas obsoletas do índice de texto completo.This statement performs a master merge, which merges the fragments into a single larger fragment and removes all obsolete entries from the full-text index.

Depois de reorganizado, o índice de exemplo conterá as linhas seguintes:After being reorganized, the example index would contain the following rows:

Palavra-chaveKeyword ColIdColId DocIdDocId OccOcc
CrankCrank 11 11 11
ArmArm 11 11 22
TireTire 11 11 44
ManutençãoMaintenance 11 11 55
FrontFront 11 22 11
TraseiroRear 11 33 11
ReflectorReflector 11 22 22
ReflectorReflector 11 22 55
ReflectorReflector 11 33 22
BracketBracket 11 22 33
AssemblyAssembly 11 22 66
33 11 22 77

Diferenças entre índices de texto completo e índices regulares do SQL Server:Differences between full-text indexes and regular SQL Server indexes:.

Índices de texto completoFull-text indexes Índices regulares do SQL ServerRegular SQL Server indexes
Só é permitido um índice de texto completo por tabela.Only one full-text index allowed per table. Vários índices regulares são permitidos por tabela.Several regular indexes allowed per table.
A adição de dados a índices de texto completo, chamada de população, pode ser solicitada através de uma agenda ou de uma solicitação específica e pode ocorrer automaticamente com a inclusão de novos dados.The addition of data to full-text indexes, called a population, can be requested through either a schedule or a specific request, or can occur automatically with the addition of new data. Atualizados automaticamente quando os dados nos quais eles se baseiam são inseridos, atualizados ou excluídos.Updated automatically when the data upon which they are based is inserted, updated, or deleted.
Agrupados no mesmo banco de dados em um ou mais catálogos de texto completo.Grouped within the same database into one or more full-text catalogs. Não agrupado.Not grouped.

Componentes linguísticos e suporte de idioma na pesquisa de texto completo Full-Text search linguistic components and language support

A pesquisa de texto completo oferece suporte a quase 50 idiomas diferentes, como inglês, espanhol, chinês, japonês, árabe, bengalês e híndi.Full-text search supports almost 50 diverse languages, such as English, Spanish, Chinese, Japanese, Arabic, Bengali, and Hindi. Para obter uma lista completa dos idiomas de texto completo com suporte, veja sys.fulltext_languages (Transact-SQL).For a complete list of the supported full-text languages, see sys.fulltext_languages (Transact-SQL). Cada uma das colunas do índice de texto completo é associada a um LCID (identificador de localidade) do Microsoft Windows que equivale a um idioma suportado pela pesquisa de texto completo.Each of the columns contained in the full-text index is associated with a Microsoft Windows locale identifier (LCID) that equates to a language that is supported by full-text search. Por exemplo, o LCID 1033 equivale ao inglês norte-americano e o LCID 2057, ao inglês britânico.For example, LCID 1033 equates to U.S English, and LCID 2057 equates to British English. Para cada idioma de texto completo suportado, o SQL ServerSQL Server fornece componentes linguísticos que dão suporte à indexação e à consulta de dados de texto completo armazenados nesse idioma.For each supported full-text language, SQL ServerSQL Server provides linguistic components that support indexing and querying full-text data that is stored in that language.

Os componentes específicos de idioma incluem:Language-specific components include the following:

  • Separadores de palavras e lematizadores.Word breakers and stemmers. Um separador de palavras encontra limites de palavras com base nas regras lexicais de determinado idioma (separação de palavras).A word breaker finds word boundaries based on the lexical rules of a given language (word breaking). Cada separador de palavras é associado a um lematizador que conjuga verbos desse idioma.Each word breaker is associated with a stemmer that conjugates verbs for the same language. Para obter mais informações, veja Configurar e gerenciar separadores de palavras e lematizadores para pesquisa.For more information, see Configure and Manage Word Breakers and Stemmers for Search.

  • Listas de palavras irrelevantes.Stoplists. É fornecida uma lista de palavras irrelevantes (stoplist) do sistema, que contém um conjunto básico de palavras irrelevantes (também chamadas de palavras de ruído).A system stoplist is provided that contains a basic set stopwords (also known as noise words). Uma palavra irrelevante consiste em uma palavra que não ajuda a pesquisa e é ignorada por consultas de texto completo.A stopword is a word that does not help the search and is ignored by full-text queries. Por exemplo, no português, palavras como "um/uma", "e", "é" e "o/a" são consideradas palavras irrelevantes.For example, for the English locale words such as "a", "and", "is", and "the" are considered stopwords. Normalmente, é preciso configurar um ou mais arquivos de dicionário de sinônimos e listas de palavras irrelevantes.Typically, you will need to configure one or more thesaurus files and stoplists. Para obter mais informações, veja Configurar e gerenciar palavras irrelevantes e listas de palavras irrelevantes para pesquisa de texto completo.For more information, see Configure and Manage Stopwords and Stoplists for Full-Text Search.

  • Arquivos de dicionário de sinônimos.Thesaurus files. SQL ServerSQL Server também instala um arquivo de dicionário de sinônimos para cada idioma de texto completo, bem como um arquivo de dicionário de sinônimos global. also installs a thesaurus file for each full-text language, as well as a global thesaurus file. Os arquivos de dicionário de sinônimos instalados são basicamente vazios, mas você pode editá-los para definir sinônimos para um determinado cenário comercial ou de idioma.The installed thesaurus files are essentially empty, but you can edit them to define synonyms for a specific language or business scenario. Ao desenvolver um dicionário de sinônimos personalizado para seus dados de texto completo, você pode efetivamente ampliar o escopo de consultas de texto completo baseadas nesses dados.By developing a thesaurus tailored to your full-text data, you can effectively broaden the scope of full-text queries on that data. Para obter mais informações, veja Configurar e gerenciar arquivos de dicionário de sinônimos para pesquisa de texto completo.For more information, see Configure and Manage Thesaurus Files for Full-Text Search.

  • Filtros (iFilters).Filters (iFilters). A indexação de um documento em uma coluna de tipo de dados varbinary(max), imageou xml exige um filtro para processamento extra.Indexing a document in a varbinary(max), image, or xml data type column requires a filter to perform extra processing. O filtro deve ser específico do tipo de documento (.doc, .pdf, .xls, .xml e assim por diante).The filter must be specific to the document type (.doc, .pdf, .xls, .xml, and so forth). Para obter mais informações, veja Configurar e gerenciar filtros para pesquisa.For more information, see Configure and Manage Filters for Search.

    Os separadores de palavras (e lematizadores) e filtros são executados no processo do host do daemon de filtro (fdhost.exe).Word breakers (and stemmers) and filters run in the filter daemon host process (fdhost.exe).

ESTE TÓPICO APLICA-SE A:simSQL Server (a partir de 2008)simAzure SQL DatabasenãoAzure SQL Data Warehouse nãoParallel Data Warehouse THIS TOPIC APPLIES TO:yesSQL Server (starting with 2008)yesAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse