Iniciar a pesquisa de texto completoGet Started with Full-Text Search

Por padrão, os bancos de dados do SQL Server são habilitados para texto completo.SQL Server databases are full-text enabled by default. No entanto, antes de executar consultas de texto completo, é necessário criar um catálogo de texto completo e criar um índice de texto completo em tabelas ou exibições indexadas nas quais você deseja pesquisar.Before you can run full-text queries, however, you must create a full text catalog and create a full-text index on the tables or indexed views you want to search.

Configurar uma pesquisa de texto completo em duas etapasSet up full-text search in two steps

Há duas etapas básicas para configurar a pesquisa de texto completo:There are two basic steps to set up full-text search:

  1. Criar um catálogo de texto completo.Create a full-text catalog.
  2. Criar um índice de texto completo em tabelas ou em uma exibição indexada na qual você deseja pesquisar.Create a full-text index on tables or indexed view you want to search.

Cada índice de texto completo deve pertencer a um catálogo de texto completo.Each full-text index must belong to a full-text catalog. Você pode criar um catálogo de texto completo separado para cada índice de texto completo ou associar vários índices de texto completo a um determinado catálogo.You can create a separate text catalog for each full-text index, or you can associate multiple full-text indexes with a given catalog. Um catálogo de texto completo é um objeto virtual; ele não pertence a nenhum grupo de arquivos.A full-text catalog is a virtual object and does not belong to any filegroup. O catálogo é um conceito lógico que faz referência a um grupo de índices de texto completo.The catalog is a logical concept that refers to a group of full-text indexes.

Observação

Essas etapas presumem que você instalou os componentes opcionais de pesquisa de texto completo quando você instalou o SQL Server.These steps assume that you installed the optional Full-Text Search components when you installed SQL Server. Caso contrário, você precisará executar a instalação do SQL Server novamente para adicioná-los.If not, you have to run SQL Server Setup again to add them.

Configurar uma pesquisa de texto completo com um assistenteSet up full-text search with a wizard

Para configurar a pesquisa de texto completo usando um assistente, consulte Usar o assistente para indexação de texto completo.To set up full-text search by using a wizard, see Use the Full-Text Indexing Wizard.

Configurar a pesquisa de texto completo com Transact-SQLSet up full-text search with Transact-SQL

O exemplo de duas partes descrito a seguir cria um catálogo de texto completo denominado AdvWksDocFTCat no banco de dados de exemplo AdventureWorks e, em seguida, cria um índice de texto completo na tabela Document no banco de dados de exemplo.The following two-part example creates a full-text catalog named AdvWksDocFTCat on the AdventureWorks sample database and then creates a full-text index on the Document table in the sample database. Essa instrução cria o catálogo de texto completo no diretório padrão especificado durante a instalação do SQL Server.This statement creates the full-text catalog in the default directory specified during SQL Server setup. A pasta nomeada AdvWksDocFTCat está no diretório padrão.The folder named AdvWksDocFTCat is in the default directory.

  1. Para criar um catálogo de texto completo denominado AdvWksDocFTCat, o exemplo usa uma instrução CREATE FULLTEXT CATALOG :To create a full-text catalog named AdvWksDocFTCat, the example uses a CREATE FULLTEXT CATALOG statement:

    USE AdventureWorks;  
    GO  
    CREATE FULLTEXT CATALOG AdvWksDocFTCat;  
    

    Para obter mais informações, consulte Criar e gerenciar catálogos de texto completo.For more info, see Create and Manage Full-Text Catalogs.

  2. Para você poder criar um índice de texto completo na tabela Document, verifique se a tabela tem um índice exclusivo, de uma só coluna e não anulável.Before you can create a full-text index on the Document table, ensure that the table has a unique, single-column, non-nullable index. A seguinte instrução CREATE INDEX cria um índice exclusivo, ui_ukDoc, na coluna DocumentID da tabela Documento:The following CREATE INDEX statement creates a unique index, ui_ukDoc, on the DocumentID column of the Document table:

    CREATE UNIQUE INDEX ui_ukDoc ON Production.Document(DocumentID);  
    
  3. Depois que você tiver uma chave exclusiva, poderá criar um índice de texto completo na tabela Document por meio da instrução CREATE FULLTEXT INDEX a seguir.After you have a unique key, you can create a full-text index on the Document table by using the following CREATE FULLTEXT INDEX statement.

    CREATE FULLTEXT INDEX ON Production.Document  
    (  
        Document                         --Full-text index column name   
            TYPE COLUMN FileExtension    --Name of column that contains file type information  
            Language 2057                 --2057 is the LCID for British English  
    )  
    KEY INDEX ui_ukDoc ON AdvWksDocFTCat --Unique index  
    WITH CHANGE_TRACKING AUTO            --Population type;  
    GO  
    

    TYPE COLUMN definido neste exemplo especifica a coluna de tipo da tabela que contém o tipo do documento em cada linha da coluna 'Document' (que é do tipo binário).The TYPE COLUMN defined in this example specifies the type column in the table that contains the type of the document in each row of the column 'Document' (which is of binary type). A coluna de tipo armazena a extensão de arquivo fornecida pelo usuário — ".doc", ".xls" etc. — do documento em uma dada linha.The type column stores the user-supplied file extension - ".doc", ".xls", and so forth - of the document in a given row. O Mecanismo de Texto Completo usa a extensão de arquivo de uma dada linha para chamar o filtro correto a ser usado para analisar os dados contidos nessa linha.The Full-Text Engine uses the file extension in a given row to invoke the correct filter to use for parsing the data in that row. Após o filtro analisar os dados binários da linha, o separador de palavras especificado analisará o conteúdo.After the filter has parsed the binary data of the row, the specified word breaker parses the content. (Neste exemplo, o separador de palavras para o inglês britânico é usado.) Para obter mais informações, veja Configurar e gerenciar filtros para pesquisa.(In this example, the word breaker for British English is used.) For more information, see Configure and Manage Filters for Search.

    Para mais informações, consulte Criar e gerenciar índices de texto completo.For more info, see Create and Manage Full-Text Indexes.

Escolher opções para um índice de texto completo Choose options for a full-text index

Escolher um idiomaChoose a language

Para obter mais informações sobre como escolher o idioma das colunas, consulte Escolher um idioma ao criar um índice de texto completo.For information about choosing the column language, see Choose a Language When Creating a Full-Text Index.

Escolher um grupo de arquivosChoose a filegroup

O processo de criação de um índice de texto completo é bastante intenso em relação a E/S.The process of building a full-text index is fairly I/O intensive. Resumidamente, ele consiste em ler dados de SQL ServerSQL Server e propagar os dados filtrados para o índice de texto completo.In summary, it consists of reading data from SQL ServerSQL Server, and then propagating the filtered data to the full-text index. Como prática recomendada, localize um índice de texto completo no grupo de arquivos do banco de dados que seja o mais apropriado para maximizar o desempenho de E/S ou localize os índices de texto completo em outro grupo de arquivos de outro volume.As a best practice, locate a full-text index in the database filegroup that is best for maximizing I/O performance or locate the full-text indexes in a different filegroup on another volume.

Escolher um catálogo de texto completoChoose a full-text catalog

Recomendamos associar tabelas com as mesmas características de atualização (como um número pequeno de alterações versus muitas alterações ou tabelas que são alteradas com frequência durante um determinado período do dia) juntas no mesmo catálogo de texto completo.We recommend associating tables with the same update characteristics (such as small number of changes versus large number of changes, or tables that change frequently during a particular time of day) together under the same full-text catalog. Através da definição de agendas de população de catálogo de texto completo, os índices de texto completo permanecem sincronizados com as tabelas, sem afetar de modo negativo o uso de recursos do servidor de banco de dados durante períodos de alta atividade do banco de dados.By setting up full-text catalog population schedules, full-text indexes stay synchronous with the tables without adversely affecting the resource usage of the database server during periods of high database activity.

Considere as seguintes diretrizes:Consider the following guidelines:

  • Se você estiver indexando uma tabela com milhões de linhas, atribua a tabela a seu próprio catálogo de texto completo.If you are indexing a table with millions of rows, assign the table to its own full-text catalog.

  • Considere o volume de alterações ocorridas nas tabelas que estão sendo indexadas com texto completo, bem como o total de linhas.Consider the amount of change occurring in the tables being full-text indexed, as well as the total number of rows. Se o total de linhas que estiverem sendo alteradas, junto com o número de linhas da tabela presentes durante a última população de texto completo, representar milhões de linhas, atribua a tabela a seu próprio catálogo de texto completo.If the total number of rows being changed, together with the number of rows in the table present during the last full-text population, represents millions of rows, assign the table to its own full-text catalog.

Associar um índice exclusivoAssociate a unique index

Sempre selecione o menor índice exclusivo disponível para sua chave exclusiva de texto completo.Always select the smallest unique index available for your full-text unique key. (O ideal é um índice baseado em inteiro de 4 bytes.) Isso reduz consideravelmente os recursos exigidos pelo serviço MicrosoftMicrosoft Search no sistema de arquivos.(A 4-byte, integer-based index is optimal.) This significantly reduces the resources required by MicrosoftMicrosoft Search service in the file system. Se a chave primária for grande (mais de 100 bytes), considere escolher outro índice exclusivo na tabela (ou criar outro índice exclusivo) como a chave exclusiva de texto completo.If the primary key is large (over 100 bytes), consider choosing another unique index in the table (or creating another unique index) as the full-text unique key. Caso contrário, se o tamanho da chave exclusiva de texto completo exceder o tamanho máximo permitido (900 bytes), a população de texto completo não poderá prosseguir.Otherwise, if the full-text unique key size exceeds the maximum size allowed (900 bytes), full-text population will not be able to proceed.

Associar uma lista de palavras irrelevantesAssociate a stoplist

Uma lista de palavras irrelevantes também é conhecida como lista de palavras de ruído.A stoplist is a list of stopwords, also known as noise words. Uma lista de palavras irrelevantes é associada a cada índice de texto completo, e as palavras dessa lista são aplicadas a consultas de texto completo nesse índice.A stoplist is associated with each full-text index, and the words in that stoplist are applied to full-text queries on that index. Por padrão, a lista de palavras irrelevantes do sistema é associada a um novo índice de texto completo.By default, the system stoplist is associated with a new full-text index. Você também pode criar e usar sua própria lista de palavras irrelevantes.You can create and use your own stoplist too.

Por exemplo, a seguinte instrução CREATE FULLTEXT STOPLIST Transact-SQLTransact-SQL cria uma nova lista de palavras irrelevantes de texto completo chamada myStoplist copiando da lista de palavras irrelevantes do sistema:For example, the following CREATE FULLTEXT STOPLIST Transact-SQLTransact-SQL statement creates a new full-text stoplist named myStoplist by copying from the system stoplist:

CREATE FULLTEXT STOPLIST myStoplist FROM SYSTEM STOPLIST;  
GO  

A seguinte instrução ALTER FULLTEXT STOPLIST Transact-SQLTransact-SQL altera uma lista de palavras irrelevantes chamada myStoplist, adicionando a palavra 'en', primeiro para espanhol e depois para francês:The following ALTER FULLTEXT STOPLIST Transact-SQLTransact-SQL statement alters a stoplist named myStoplist, adding the word 'en', first for Spanish and then for French:

ALTER FULLTEXT STOPLIST myStoplist ADD 'en' LANGUAGE 'Spanish';  
ALTER FULLTEXT STOPLIST myStoplist ADD 'en' LANGUAGE 'French';  
GO  

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.

Atualizar um índice de texto completoUpdate a full-text index

Como os índices normais do SQL ServerSQL Server , os índices de texto completo podem ser atualizados automaticamente à medida que dados são modificados nas tabelas associadas.Like regular SQL ServerSQL Server indexes, full-text indexes can be automatically updated as data is modified in the associated tables. Esse é o comportamento padrão.This is the default behavior. Como alternativa, você pode manter seus índices de texto completo atualizados manualmente ou em intervalos agendados especificados.Alternatively, you can keep your full-text indexes up-to-date manually, or at specified scheduled intervals. Popular um índice de texto completo pode ser demorado e usar muitos recursos.Populating a full-text index can be time-consuming and resource-intensive. No entanto, a atualização de índices geralmente é feita como um processo assíncrono em segundo plano e mantém o índice de texto completo atualizado após modificações na tabela base.Therefore, index updating is usually performed as an asynchronous process that runs in the background and keeps the full-text index up to date after modifications in the base table.

Atualizar um índice de texto completo imediatamente após cada alteração na tabela base também usa muitos recursos.Updating a full-text index immediately after each change in the base table is also resource-intensive. Por isso, se você tiver uma taxa de atualização/inserção/exclusão muito alta, poderá observar alguma degradação no desempenho de consulta.Therefore, if you have a high update/insert/delete rate, you may experience some degradation in query performance. Se isso ocorrer, considere agendar atualizações manuais do controle de alterações para acompanhar o ritmo das inúmeras alterações periódicas, em vez de competir por recursos com as consultas.If this occurs, consider scheduling manual change tracking updates to keep up with the numerous changes from time to time, rather than competing with queries for resources.

Para obter mais informações, consulte Popular índices de texto completo.For more info, see Populate Full-Text Indexes.

Próximas etapasNext steps

Depois de configurar a pesquisa de texto completo do SQL Server, você estará pronto para executar consultas de texto completo.After you set up SQL Server Full-Text Search, you're ready to run full-text queries. Para mais informações, veja Consulta com pesquisa de texto completo.For more info, see Query with Full-Text Search.