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.
A Pesquisa de Texto Completo no SQL Server e no Banco de Dados SQL do Azure permite que usuários e aplicativos executem consultas de texto completo em dados baseados em caracteres em tabelas do SQL Server. Antes de executar consultas de texto completo em uma tabela, o administrador do banco de dados deve criar um índice de texto completo na tabela. O índice de texto completo inclui uma ou mais colunas baseadas em caracteres na tabela. Essas colunas podem ter qualquer um dos seguintes tipos de dados: char, , varchar, nchar, nvarchar, text, , ntext, image, , xmlou varbinary(max) FILESTREAM. Cada índice de texto completo indexa uma ou mais colunas da tabela e cada coluna pode usar um idioma específico.
Consultas de texto completo realizam pesquisas linguísticas em relação a dados de texto em índices de texto completo, operando em palavras e frases com base em regras de um idioma específico, como inglês ou japonês. 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 qualquer documento que contenha pelo menos um resultado (também conhecido como 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 outras condições 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 do SQL Server. Para obter mais informações, consulte Instalar o SQL Server 2014.
O que posso fazer com a pesquisa Full-Text?
A pesquisa de texto completo é aplicável a uma ampla variedade de cenários de negócios, como empresas eletrônicas pesquisando itens em um site; escritórios de advocacia buscando históricos de casos em um repositório de dados legais; ou departamentos de recursos humanos fazendo a correspondência entre descrições de trabalho e currículos armazenados. As tarefas administrativas e de desenvolvimento básicas da pesquisa de texto completo são equivalentes, independentemente dos cenários de negócios. No entanto, em um determinado cenário de negócios, o índice de texto completo e as consultas podem ser aprimorados para atender às metas de negócios. Por exemplo, para um e-business, maximizar o desempenho pode ser mais importante do que a classificação de resultados, a precisão de recall (quantas correspondências existentes são realmente retornadas por uma consulta de texto completo) ou o suporte a vários idiomas. Para um escritório de advocacia, retornar todos os possíveis acertos (recall total de informações) pode ser a consideração mais importante.
Consultas de pesquisa de Full-Text
Depois que as colunas forem adicionadas a um índice de texto completo, os usuários e aplicativos poderão executar consultas de texto completo no texto nas colunas. Essas consultas podem procurar qualquer uma das seguintes:
Uma ou mais palavras ou frases específicas (termo simples)
Uma palavra ou uma frase em que as palavras começam com o texto especificado (termo de prefixo)
Formas de inflexão de uma palavra específica (termo de geração)
Uma palavra ou frase próxima a outra palavra ou frase (termo de proximidade)
Formas sinônimos de uma palavra específica (dicionário de sinônimos)
Palavras ou frases usando valores ponderados (termo ponderado)
As consultas de texto completo não são sensíveis a maiúsculas e minúsculas. Por exemplo, a pesquisa por "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). No entanto, as metas de pesquisa de um determinado cenário de negócios influenciam a estrutura das consultas de texto completo. Por exemplo:
Pesquisa de e-business para 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 ;Pesquisa de cenários de recrutamento para candidatos a emprego que tenham experiência trabalhando 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, consulte Consulta com Full-Text Pesquisa.
Comparando LIKE com Full-Text Search
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.
Componentes e Arquitetura da Busca de Full-Text
A arquitetura de pesquisa de texto completo consiste nos seguintes processos:
O processo do SQL Server (sqlservr.exe).
O processo de daemon host de filtro (fdhost.exe).
Por motivos de segurança, os filtros são carregados por processos separados chamados hosts daemon de filtro. Os processos fdhost.exe são criados por um serviço de inicializador FDHOST (MSSQLFDLauncher) e são executados sob as credenciais de segurança da conta de serviço do inicializador FDHOST. Portanto, o serviço inicializador 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 definir a conta de serviço para esse serviço, consulte Definir a Conta de Serviço para o 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 resumidos na ilustração a seguir. Os componentes são descritos após a ilustração.
Processo do SQL Server
O processo do SQL Server usa os seguintes componentes para pesquisa de texto completo:
Tabelas de usuário. Essas tabelas contêm os dados a serem indexados em texto completo.
Coletor de texto completo. O coletor de texto completo funciona com os fluxos de rastreamento de texto completo. Ele é responsável por agendar e gerenciar a população de índices de texto completo e também monitorar catálogos de texto completo.
Arquivos de dicionário de sinônimos. Esses arquivos contêm sinônimos de termos de pesquisa. Para obter mais informações, consulte Configurar e gerenciar arquivos de dicionário de sinônimos para pesquisa de Full-Text.
Objetos de stoplist. Os objetos stoplist 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.
Processador de consulta do SQL Server. 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 para o mecanismo de Full-Text, tanto durante a compilação quanto durante a execução. O resultado da consulta é comparado ao índice de texto completo.
motor Full-Text. O mecanismo de Full-Text no SQL Server é totalmente integrado ao processador de consulta. O mecanismo Full-Text compila e executa consultas de texto completo. Como parte da execução da consulta, a Engine Full-Text pode receber entradas do dicionário de sinônimos e da stoplist.
Criador de índice (indexador). O gravador de índice cria a estrutura usada para armazenar os tokens indexados.
Gerenciador de daemon de filtro. O gerenciador do filtro daemon é responsável por monitorar o status do host do filtro daemon da Full-Text Engine.
Filtrar o processo de host daemon
O host daemon de filtro é um processo iniciado pelo mecanismo de Full-Text. Ele executa os seguintes componentes de pesquisa de texto completo, que são responsáveis por acessar, filtrar e quebrar palavras de dados de tabelas, bem como para quebra de palavras e interrupção da entrada da consulta.
Os componentes do host 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 em um banco de dados especificado. Uma de suas responsabilidades é coletar dados das colunas que estão sendo indexadas em texto completo e passá-los para o host do serviço de filtro, que aplicará a filtragem e o quebrador de palavras conforme necessário.
Filtros. Alguns tipos de dados exigem filtragem antes que os dados em um documento possam ser indexados em texto completo, incluindo dados em
varbinary,varbinary(max)ouimagexmlcolunas. O filtro usado para um determinado documento depende de seu tipo de documento. Por exemplo, filtros diferentes são usados para documentos do Microsoft Word (.doc), documentos do Microsoft Excel (.xls) e documentos XML (.xml). Em seguida, o filtro extrai partes de texto do documento, removendo a formatação inserida e retendo o texto e, potencialmente, informações sobre a posição do texto. O resultado é um fluxo de informações textuais. Para obter mais informações, consulte Configurar e gerenciar filtros para pesquisa.Separadores de palavras e lematizadores. Um separador de palavras é um componente específico da linguagem que localiza limites de palavras com base nas regras léxicos de um determinado idioma (quebra de palavras). Cada separador de palavras é associado a um componente stemmer específico da linguagem, que conjuga verbos e executa expansões morfológicas. No momento da indexação, o host daemon de filtro usa um separador de palavras e um lematizador para executar análise linguística nos 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 lematizador são usados para indexar a coluna. Para obter mais informações, consulte Configurar e gerenciar separadores de palavras e lematizadores para pesquisa.
processamento de pesquisa Full-Text
A pesquisa de texto completo é impulsionada pelo motor Full-Text. O mecanismo Full-Text tem duas funções: suporte de indexação e suporte de consulta.
Full-Text Processo de Indexação
Quando uma indexação de texto completo (também conhecida como varredura) é iniciada, o mecanismo de Full-Text envia grandes lotes de dados para a memória e notifica o host do daemon de filtro. O host filtra e a palavra quebra os dados e converte os dados convertidos em listas de palavras invertidas. A pesquisa de texto completo, em seguida, extrai os dados convertidos das listas de palavras, processa os dados para remover palavras irrelevantes e persiste as listas de palavras de um lote em um ou mais índices invertidos.
Ao indexar dados armazenados em uma varbinary(max) ou image coluna, 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 dados varbinary(max) 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 coletados são passados por um separador de palavras para separar o texto em tokens individuais ou palavras-chave. O idioma usado para a tokenização é especificado no nível da coluna ou pode ser identificado dentro varbinary(max), imageou xml dados pelo componente de filtro.
O processamento adicional pode ser executado para remover palavras irrelevantes e normalizar tokens antes que eles sejam armazenados no índice de texto completo ou em um fragmento de índice.
Quando uma população é concluída, um processo final de mesclagem é disparado, mesclando todos os fragmentos de índice em um índice mestre de texto completo. Isso resulta em um melhor desempenho de consulta, pois apenas o índice mestre precisa ser consultado em vez de vários fragmentos de índice, e estatísticas de melhor pontuação podem ser usadas para classificação de relevância.
Full-Text processo de consulta
O processador de consulta passa as porções de texto completo de uma consulta para o mecanismo Full-Text para processamento. O mecanismo Full-Text executa a quebra de palavras e, opcionalmente, expansões de tesauro, lematização e processamento de palavras de parada (palavras de ruído). Em seguida, as partes do texto completo da consulta são representadas na forma de operadores SQL, principalmente como funções com valor de tabela em streaming (STVFs). Durante a execução da consulta, esses STVFs acessam o índice invertido para recuperar os resultados corretos. Os resultados são retornados ao cliente neste momento ou são processados antes de serem retornados ao cliente.
Componentes linguísticos e suporte à linguagem na pesquisa de Full-Text
A pesquisa de texto completo dá suporte a quase 50 idiomas diversos, como inglês, espanhol, chinês, japonês, árabe, bangla e hindi. Para obter uma lista completa dos idiomas de texto completo com suporte, consulte sys.fulltext_languages (Transact-SQL). Cada uma das colunas contidas no índice de texto completo está associada a um LCID (identificador de localidade) do Microsoft Windows que equivale a um idioma compatível com a pesquisa de texto completo. Por exemplo, o LCID 1033 equivale ao inglês americano, e o LCID 2057 equivale ao inglês britânico. Para cada linguagem de texto completo com suporte, 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 do idioma incluem o seguinte:
Separadores de palavras e lematizadores. Um separador de palavras encontra limites de palavras com base nas regras léxicos de um determinado idioma (quebra de palavra). Cada separador de palavras está associado a um "stemmer" que conjuga verbos para o mesmo idioma. Para obter mais informações, consulte Configurar e gerenciar separadores de palavras e lematizadores para pesquisa.
Listas de palavras de parada. Uma lista de palavras irrelevantes é fornecida pelo sistema, contendo um conjunto básico de palavras de parada (também conhecidas como palavras de ruído). Uma palavra irrelevante é uma palavra que não ajuda a pesquisa e é ignorada por consultas de texto completo. Por exemplo, para o local do inglês, palavras como "a", "and", "is" e "the" são consideradas palavras de parada. Normalmente, você precisará configurar um ou mais arquivos de dicionário e listas de palavras de parada. Para obter mais informações, veja Configurar e gerenciar palavras irrelevantes e listas de palavras irrelevantes para pesquisa de texto completo.
Arquivos de dicionário de sinônimos. O SQL Server também instala um arquivo de dicionário de sinônimos para cada linguagem de texto completo, bem como um arquivo global de dicionário de sinônimos. Os arquivos de dicionário de sinônimos instalados estão essencialmente vazios, mas você pode editá-los para definir sinônimos para um cenário de negócios ou idioma específico. Ao desenvolver um dicionário de sinônimos adaptado aos seus dados de texto completo, você pode efetivamente ampliar o escopo de consultas de texto completo nesses dados. Para obter mais informações, consulte Configurar e gerenciar arquivos de dicionário de sinônimos para pesquisa de Full-Text.
Filtros (iFilters). A indexação de um documento em uma coluna de tipo de dados como
varbinary(max),image, ouxmlrequer um filtro para executar processamento extra. O filtro deve ser específico para o tipo de documento (.doc, .pdf, .xls, .xmle assim por diante). Para obter mais informações, consulte Configurar e gerenciar filtros para pesquisa.
Separadores de palavras (e lematizadores) e filtros são executados no processo de host do daemon de filtro (fdhost.exe).
Tarefas Relacionadas
Escrevendo consultas Full-Text
Gerenciando catálogos e índices
Gerenciando os componentes linguísticos
Configurar e gerenciar separadores de palavras e lematizadores para pesquisa
Exibir ou alterar filtros registrados e separadores de palavras
Reverter os separadores de palavras usados pela pesquisa para a versão anterior
Alterar o separador de palavras usado para inglês dos EUA e inglês do Reino Unido
Personalizar o comportamento de separadores de palavras com um dicionário personalizado
Configurar e gerenciar stopwords e stoplists para pesquisa de Full-Text
Configurar e gerenciar arquivos de sinônimos para pesquisa de Full-Text
Gerenciando a pesquisa de Full-Text