Atenção: esse artigo tem um vídeo complementar. Clique e assista!

Do que se trata este artigo:

Neste artigo, abordaremos a funcionalidade disponível no SQL Server 2008 para pesquisas textuais conhecida como Full-Text Search, sua instalação e implementação. Além disso, veremos como desenvolver pesquisas textuais utilizando os predicados CONTAINS, CONTAINSTABLE, FREETEXT e FREETEXTTABLE, e utilizar a funcionalidade FILESTREAM para melhorar as pesquisas realizadas e o armazenamento de dados binários em tabelas.


Para que serve:

Este artigo auxilia profissionais no desenvolvimento de pesquisas textuais mais inteligentes e eficientes através do Full-Text Search, não apenas demonstrando sua configuração e utilização como também a sua arquitetura e as melhoras práticas na utilização do Full-Text Search.


Em que situação o tema é útil:

No desenvolvimento de sistemas que acessam diversos tipos de informações textuais, incluindo documentos binários, e necessitam extrair informação de forma rápida, eficiente e com maior relevância dentro dos termos pesquisados.

A pesquisa baseada em palavras e frases é uma das principais características das ferramentas de buscas na web, como o Google, e dos sistemas de gerenciamento de documentos digitais. Para executar estas pesquisas de forma eficiente, muitos desenvolvedores criam aplicações extremamente complexas e que não possuem a inteligência necessária na procura de termos e frases nas colunas que armazenam textos e documentos digitais nas tabelas dos bancos de dados.

O que a grande maioria desses profissionais não conhece é que o SQL Server possui uma avançada ferramenta para pesquisas textuais, o Full-Text Search (FTS).

O FTS está presente no SQL Server desde a sua versão 7 e através da sua utilização é possível realizar pesquisas textuais tanto em colunas que armazenam caracteres como em colunas que armazenam documentos (por exemplo, documentos do Office e PDFs), em sua forma nativa.

Com opções como pesquisas por palavras e frases, reconhecimento de diferentes idiomas, derivação de palavras (por exemplo: jogar, jogou e jogando), possibilidade de desenvolver um dicionário de sinônimos, criação de resultados ranqueados e eliminação de palavras irrelevantes para a pesquisa, o FTS torna-se uma poderosa ferramenta para pesquisas textuais. Como principais fatores para a utilização das pesquisas textuais, temos:

  • Os bancos de dados atuais são cada vez mais utilizados como repositórios de documentos digitais;
  • O custo para o armazenamento de informações diminuiu consideravelmente, possibilitando o armazenamento de Gigabytes, Terabytes e até Petabytes;
  • Novos tipos de documentos digitais são constantemente criados e os requisitos para seu armazenamento, e posterior pesquisa, estão cada vez maiores e mais complexos;
  • Os desenvolvedores precisam de uma interface robusta e confiável para a realização de pesquisas textuais inteligentes.

O FTS possui grandes vantagens em relação a outras alternativas para pesquisas textuais, como por exemplo, o comando LIKE. As principais tarefas que podem ser realizadas com o FTS são:

  • Realização de pesquisas textuais baseadas na linguística. Uma pesquisa linguística é baseada em palavras ou frases de um idioma específico, levando em consideração a conjugação de verbos, palavras derivadas, acentuação, entre outras características. Diferente do predicado LIKE, o FTS utiliza uma eficiente estrutura de indexação para realizar a pesquisa textual;
  • Remoção automática de palavras irrelevantes informadas em uma pesquisa textual. Consideram-se palavras irrelevantes aquelas que não agregam qualidade para o resultado da pesquisa, como por exemplo: de, para, o, a, uma, um;
  • Atribuição de pesos para os termos pesquisados, fazendo com que determinadas palavras sejam mais importantes do que outras dentro de uma mesma pesquisa textual;
  • Geração de ranqueamento, possibilitando uma melhor visualização dos documentos que são mais relevantes de acordo com a pesquisa realizada;
  • Indexação e pesquisa nos mais diversos tipos de documentos digitais. Com o FTS é possível realizar pesquisas em arquivos texto, planilhas, arquivos ZIP, entre outros.

Neste artigo será descrita a arquitetura do FTS, sua instalação e configuração, os principais comandos T-SQL utilizados na realização de pesquisas textuais, a utilização do FTS em conjunto com o FILESTREAM e também algumas técnicas para otimizar as pesquisas através do FTS.

Arquitetura do FTS

A arquitetura do FTS possui vários componentes trabalhando em conjunto com o processador de consulta do SQL Server para realizar pesquisas textuais de forma eficiente. A Figura 1 ilustra os principais componentes da arquitetura do FTS. Vejamos alguns deles:

  • Consulta Cliente: A aplicação cliente envia as consultas textuais para o processador de consultas do SQL Server. É responsabilidade da aplicação cliente garantir que as consultas textuais estejam escritas da forma correta, seguindo a sintaxe do FTS;
  • SQL Server Process (sqlservr.exe): O processo do SQL Server contém o processador de consulta e também a engine do FTS, que compila e executa as consultas textuais. A integração entre o processo do SQL Server e o FTS oferece um aumento de performance significativo ao SQL Server 2008 em relação a versões anteriores, pois permite que o processador de consultas monte planos de execução mais eficientes para as pesquisas textuais;
  • Processador de consulta do SQL Server: O processador de consulta possui vários subcomponentes que são responsáveis por validar a sintaxe, compilar, gerar os planos de execução e executar as consultas SQL;
  • Engine Full-Text: Quando o processador de consulta do SQL Server recebe uma consulta FTS, ele encaminha a requisição para a Engine FTS. A Engine FTS é responsável por validar a sintaxe da consulta FTS, verificar o índice full-text e então trabalhar em conjunto com o processador de consulta do SQL Server para retornar os resultados da pesquisa textual;
  • Indexador: O indexador trabalha em conjunto com outros componentes para popular o índice full-text;
  • Índice Full-Text: O índice full-text contém as palavras mais relevantes e suas respectivas posições dentro das colunas incluídas no índice;
  • Stoplist: A stoplist é uma lista de palavras irrelevantes para a pesquisa textual. O indexador consulta a stoplist durante o processo de indexação e execução da pesquisa textual para eliminar as palavras que não agregam valor à pesquisa. Diferentemente de versões anteriores, o SQL Server 2008 armazena as stoplists dentro do próprio banco de dados, facilitando assim a sua administração;
  • Thesaurus: O thesaurus é um arquivo XML (armazenado externamente ao banco de dados) no qual é possível definir uma lista de sinônimos que podem ser utilizados durante a pesquisa textual. A montagem do thesaurus precisa ser baseada no idioma que será utilizado na pesquisa. A engine full-text lê o arquivo thesaurus no momento da execução da pesquisa para verificar a existência de sinônimos que possam aumentar a qualidade e abrangência da mesma;
  • Filter daemon host (fdhost.exe): É o responsável por gerenciar os processos de filtragem, word breaker e stemmer;
  • SQL Full-Text Filter Daemon Launcher (fdlauncher.exe): É o processo que inicia o Filter daemon host (Fdhost.exe) quando a engine full-text necessita utilizar algum dos processos gerenciados pelo mesmo.

Figura 1. Arquitetura do FTS.

Para o melhor entendimento do processo de criação, utilização e manutenção da estrutura de índices full-text, é preciso também conhecer o significado de alguns conceitos importantes. São eles:

  • Termo: A palavra, frase ou caractere utilizado na pesquisa textual;
  • Catálogo Full-Text: Um grupo de índices full-text;
  • Word breaker: O processo que encontra os limitadores de cada palavra em uma frase, baseando-se nas regras gramaticais do idioma selecionado para a criação do índice full-text;
  • Token: Uma palavra, frase ou caractere definido pelo processo word breaker;
  • Stemmer: O processo que gera diferentes formas verbais para as palavras, baseando-se nas regras gramaticais do idioma selecionado para a criação do índice full-text;
  • Filtro: Componente responsável por extrair informação textual de documentos armazenados com o tipo de dados VARBINARY(MAX) e enviar essas informações para o processo word breaker.

Processo de Indexação

O processo de indexação é responsável pela população inicial de um índice full-text e pela atualização deste índice quando ocorrerem modificações de dados nas colunas que foram indexadas pelo FTS. Esse processo de inicialização e atualização do índice full-text recebe o nome de ...

Quer ler esse conteúdo completo? Tenha acesso completo