Partilhar via


Pesquisa de Texto Completo

A Pesquisa de Texto Completo no SQL Server e Banco de Dados SQL do Azure permite que usuários e aplicativos executem consultas de texto completo em dados baseados em caracteres nas tabelas do SQL Server . Para que você possa executar consultas de texto completo em uma tabela, o administrador de banco de dados deve criar um índice de texto completo na tabela. O índice de texto completo inclui uma ou mais colunas baseadas em caractere da tabela. Essas colunas podem ter qualquer um destes tipos de dados: char, varchar, nchar, nvarchar, text, ntext, image, xml ou varbinary(max) e FILESTREAM. Cada índice de texto completo indexa uma ou mais colunas da tabela base, e cada coluna pode usar um idioma específico.

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. As consultas de texto completo podem incluir palavras e frases simples ou várias formas de uma palavra ou frase. Uma consulta de texto completo retorna todos os documentos que contiverem, pelo menos, uma correspondência (também conhecida como uma ocorrência). 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.

Observação

A pesquisa de texto completo é um componente opcional do Mecanismo de Banco de Dados SQL Server. Para obter mais informações, consulte Instalar SQL Server 2014.

O que é possível fazer com a pesquisa de texto completo?

A pesquisa de texto completo é aplicável a uma ampla variedade de cenários de negócios, como a pesquisa de itens por empresas eletrônicos em um site da Web; escritórios de advocacia que pesquisam históricos de casos em um repositório de dados legais; ou departamentos de recursos humanos que correspondem a descrições de trabalho com currículos armazenados. As tarefas básicas de administração e desenvolvimento da pesquisa de texto completo são equivalentes, independentemente dos cenários comerciais. No entanto, em um dado cenário comercial, as consultas e o índice de texto completo podem ser ajustados para atender a metas comerciais. Por exemplo, em um cenário de e-business, maximizar o desempenho deve ser mais importante do que a classificação de resultados, a precisão da recuperação (quantas correspondências existentes são de fato retornadas por uma consulta de texto completo) ou o suporte a vários idiomas. Em um escritório de advocacia, retornar cada acerto possível (recuperação total de informações) deve ser o aspecto mais importante a ser considerado.

Neste tópico

Consultas da pesquisa de texto completo

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. Essas consultas podem procurar qualquer um dos seguintes itens:

  • Uma ou mais palavras ou frases específicas (termo simples)

  • Uma palavra ou frase na qual as palavras começam com o texto especificado (termo de prefixo)

  • As formas flexionadas de uma palavra específica (termo de geração)

  • Uma palavra ou frase perto de outra palavra ou frase (termo de proximidade).

  • Os sinônimos de uma palavra específica (dicionário de sinônimos)

  • Palavras ou frases que usam valores ponderados (termo ponderado)

As consultas de texto completo não diferenciam maiúsculas de minúsculas. Por exemplo, a pesquisa de "Alumínio" ou "alumínio" retorna os mesmos resultados.

As consultas de texto completo usam um pequeno conjunto de predicados Transact-SQL (CONTAINS e FREETEXT) e funções (CONTAINSTABLE e FREETEXTTABLE). Entretanto, as metas de pesquisa de um determinado cenário comercial influenciam a estrutura das consultas de texto completo. Por exemplo:

  • Comércio eletrônico – procurando por um produto em um site:

    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 – procurando candidatos a uma vaga de trabalho que tenham experiência prática com o SQL 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.

Neste tópico

Comparando LIKE à pesquisa de texto completo

Ao contrário da pesquisa de texto completo, o predicado LIKETransact-SQL funciona apenas em padrões de caracteres. Além disso, não é possível usar o predicado LIKE para consultar dados binários formatados. 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. 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.

Neste tópico

Componentes e arquitetura da pesquisa de texto completo

A arquitetura de pesquisa de texto completo é formada pelos seguintes processos:

  • O processo do SQL Server (sqlservr.exe).

  • O processo de host do daemon de filtro (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. 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. 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. 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.

Esses dois processos contêm os componentes da arquitetura de pesquisa de texto completo. Esses componentes e suas relações são resumidas na ilustração a seguir. Os componentes são descritos após a ilustração.

arquitetura de pesquisa

Neste tópico

Processo SQL Server

O processo do SQL Server usa os seguintes componentes na pesquisa de texto completo:

  • Tabelas de usuário. Essas tabelas contêm os dados para serem indexados com texto completo.

  • Gatherer de texto completo. O gatherer de texto completo funciona com os threads de rastreamento de texto completo. 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.

  • Arquivos do dicionário de sinônimos. Esses arquivos contêm sinônimos de termos de pesquisa. Para obter mais informações, veja Configurar e gerenciar arquivos de dicionário de sinônimos para pesquisa de texto completo.

  • Objetos da lista de palavras irrelevantes (stoplist). Os objetos da lista de palavras irrelevantes contêm uma lista de palavras comuns que não são úteis para a pesquisa. Para obter mais informações, veja Configurar e gerenciar palavras irrelevantes e listas de palavras irrelevantes para pesquisa de texto completo.

  • SQL Server processador de consultas. O processador de consulta compila e executa consultas SQL. 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. O resultado da consulta é comparado com o índice de texto completo.

  • Mecanismo de Texto Completo. O Mecanismo de Texto Completo do SQL Server está totalmente integrado ao processador de consultas. O Mecanismo de Texto Completo compila e executa consultas de texto completo. 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.

  • Gravador de índice (indexador). O gravador de índice cria a estrutura usada para armazenar os tokens indexados.

  • Gerenciador de daemon de filtro. O gerenciador de daemon de filtro é responsável por monitorar o status do host do daemon de filtro do Mecanismo de Texto Completo.

Neste tópico

Processo do host do daemon de filtro

O host do daemon de filtro é um processo que é iniciado pelo Mecanismo de Texto Completo. 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.

Os componentes do host do daemon de filtro são os seguintes:

  • Manipulador de protocolo. 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. 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.

  • Filtros. 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), image ou xml. O filtro usado para um dado documento depende de seu tipo de documento. Por exemplo, são usados filtros diferentes para documentos do Microsoft Word (.doc), do Microsoft Excel (.xls) e no formato XML (.xml). 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. O resultado é um fluxo de informações textuais. Para obter mais informações, veja Configurar e gerenciar filtros para pesquisa.

  • Separadores de palavras e lematizadores. 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). Cada separador de palavras é associado a um componente lematizador específico do idioma, que conjuga verbos e executa expansões flexionadas. 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. 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. Para obter mais informações, veja Configurar e gerenciar separadores de palavras e lematizadores para pesquisa.

Neste tópico

Processamento da pesquisa de texto completo

A pesquisa de texto completo é ativada pelo Mecanismo de Texto Completo. O Mecanismo de Texto Completo tem duas funções: suporte a indexação e suporte a consulta.

Processo de indexação de texto completo

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. O host filtra e o Word divide os dados e converte os dados convertidos em listas de palavras invertidas. 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.

Ao indexar dados armazenados em uma varbinary(max) coluna ou image , o filtro, que implementa a interface IFilter, extrai texto com base no formato de arquivo especificado para esses dados (por exemplo, Microsoft Word). Em alguns casos, os componentes de filtro exigem que os varbinary(max)dados ou image sejam gravados na pasta filterdata, em vez de serem enviados por push para a memória.

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. A linguagem usada para geração de tokens é especificada no nível da coluna, podendo ser identificada em dados varbinary(max), image ou xml, pelo componente de filtro.

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.

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. 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.

Neste tópico

Processo de consulta de texto completo

O processador de consultas passa as partes do texto completo de uma consulta para o Mecanismo de Texto Completo para processamento. 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). 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). Durante a execução da consulta, essas STVFs acessam o índice invertido para recuperar os resultados corretos. Os resultados são retornados para o cliente neste momento ou processados mais um pouco antes de serem retornados ao cliente.

Neste tópico

Componentes linguísticos e suporte de idioma na pesquisa de texto completo

A pesquisa de texto completo é compatível com quase 50 idiomas diferentes, como inglês, espanhol, chinês, japonês, árabe, bengali e híndi. Para obter uma lista completa dos idiomas de texto completo com suporte, consulte 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. Por exemplo, o LCID 1033 equivale ao inglês norte-americano e o LCID 2057, ao inglês britânico. Para cada idioma de texto completo suportado, o SQL Server fornece componentes linguísticos que dão suporte à indexação e à consulta de dados de texto completo armazenados nesse idioma.

Os componentes específicos de idioma incluem:

  • Separadores de palavras e lematizadores. Um separador de palavras encontra limites de palavras com base nas regras lexicais de determinado idioma (separação de palavras). Cada separador de palavras é associado a um lematizador que conjuga verbos desse idioma. Para obter mais informações, veja Configurar e gerenciar separadores de palavras e lematizadores para pesquisa.

  • Listas de palavras irrelevantes. É 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). Uma palavra irrelevante consiste em uma palavra que não ajuda a pesquisa e é ignorada por consultas de texto completo. Por exemplo, no português, palavras como "um/uma", "e", "é" e "o/a" são consideradas palavras irrelevantes. Normalmente, é preciso configurar um ou mais arquivos de dicionário de sinônimos e listas de palavras irrelevantes. Para obter mais informações, veja Configurar e gerenciar palavras irrelevantes e listas de palavras irrelevantes para pesquisa de texto completo.

  • Arquivos do dicionário de sinônimos. SQL 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. 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. 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. Para obter mais informações, veja Configurar e gerenciar arquivos de dicionário de sinônimos para pesquisa de texto completo.

  • Filtros (iFilters). A indexação de um documento em uma coluna de tipo de dados varbinary(max), image ou xml requer um filtro para executar processamento extra. O filtro deve ser específico do tipo de documento (.doc, .pdf, .xls, .xml e assim por diante). Para obter mais informações, veja Configurar e gerenciar filtros para pesquisa.

Os separadores de palavras (e lematizadores) e filtros são executados no processo do host do daemon de filtro (fdhost.exe).

Neste tópico

Related Tasks

Neste tópico

Conteúdo relacionado

Neste tópico