Como criar índices Full-Text

A maior vantagem de usar esta funcionalidade é que cada palavra em seus dados textuais está indexada, portanto consultas procurando por partes de seqüências de caracteres podem ser surpreendentemente rápida.

Bancos de dados são excelentes repositórios para todos os tipos de dados, incluindo grandes quantidades de texto. Muitas empresas, na verdade, tem todos os documentos corporativos armazenados em seus bancos de dados. Novos tipos de dados, como nvarchar(max), foram desenvolvidos para armazenar grandes quantidades de texto. Como a instrução SELECT não foi projetada para manipular tais quantidades de texto, algo mais tinha que ser desenvolvido — algo mais robusto. Como a pesquisa usando índices Full-Text.

A pesquisa com índice Full-Text pode ser definida como um programa completamente separado que é executado como um serviço (chamado de SQL Server FullText Search, ou msftesq). Assim, quando você executa uma pesquisa com índice Full-Text, você está informando ao SQL Server para fazer uma solicitação do serviço FullText Search. Para executar esta pesquisa, você precisa apenas usar as seguintes cláusulas em sua consulta SELECT: CONTAINS, CONTAINSTABLE, FREETEXT, ou FREETEXTTABLE.

No sentido mais geral, você pode pensar que os índices Full-Text são semelhantes aos outros índices do SQL Server, no qual se organiza os dados, para que você possa encontrar informações muito rapidamente. Mas a semelhança pára por aí. A seguir descreveremos as principais diferenças, a fim de que você possa melhor projetar e implementar um índice Full-Text.

Os índices no SQL Server são armazenados nos arquivos de dados de seu banco de dados, enquanto que os índices Full-Text são armazenados externamente nos arquivos do seu sistema operacional.

  • Você pode ter vários (na verdade, até 250) índices por tabela no SQL Server, porém só pode ter apenas um índice Full-Text por tabela.
  • Existe apenas uma entrada para cada índice com sua respectiva linha de dados, no índice Full-Text pode haver muitas entradas para cada linha, porque cada linha é quebrada em palavras separadas.
  • Os índices no SQL Server são mantidos individualmente, enquanto que os índices Full-Text são agrupadas em catálogos para facilitar de manutenção.

Para poder usar essa poderosa ferramenta, você precisa configurá-la. O primeiro passo que você precisa fazer é criar um índice Full-Text. Você cria estes índices com as ferramentas do SQL Server, como o SQL Server Management Studio, mas executá-los precisa do serviço FullText Search; eles são armazenados no disco em arquivos separados do banco de dados. Para manter o índice full-text organizado, eles são armazenados no catálogo. Você pode criar tantos catálogos em seus bancos de dados que você quiser organizar seus índices, mas esses catálogos não podem ser uma extensão dos seus bancos de dados, como falamos anteriormente.

Podemos verificar que um dos bancos de dados que sua empresa possui e que estiver sendo utilizado pode contém uma tabela que armazene grandes documentos. Se seus usuários têm usado instruções SELECT padrão para acessar os documentos nesta tabela, o resultado deste método é provavelmente muito lento. Então você pode criar índices FullText para obter resultados com maior rapidez e facilidade, sanando esse baixo desempenho nas consultas.

Vamos criar um novo catálogo FullText e um índice na tabela Production.Document, conforme os passos a seguir:

  1. Abra o SQL Server Management Studio, no Object Explorer, expanda Databases ® AdventureWorks ® Tables.
  2. Na tabela Production.Document, clique com o botão direito, escolha Full-Text Index, e clique Define Full-Text Index. Será mostrado a tela do assistente Full-Text Indexing para criação do catalógo, clique em Next.
  3. Cada tabela em que você cria um índice full-text já deve ter um índice unique associado com ele para que o serviço FullText Search possa trabalhar. Nesta instância, selecione o índice PK_Document_DocumentID e clique em Next, conforme mostrado na figura abaixo.
  4. Full Text Search
    Selecionando o índice PK_Document_DocumentID
  5. Na próxima tela, será solicitado em que coluna deseja índice FullText. Escolhemos para nossa demonstração o atributo Document-Summary porque é a única coluna nvarchar(max) na tabela, de forma que é a melhor candidata para o índice. Selecione clicando neste atributo e pressione em seguida Next, conforme mostrado na figura abaixo.
  6. Full-Text Search Document Document Summary
    Selecionando o atributo Document Summary
  7. Nesta tela, você será perguntado quando você deseja que as alterações sejam aplicadas no índice Full-Text, no qual você está criando. Escolha Automatically, e clique em Next, conforme mostrado na figura abaixo.
  8. Full-Text Search Automatically
    Selecionando o modo Automatically no Full-Text
  9. Na tela a seguir, será solicitado para que você selecione o catálogo ou caso ainda não esteja disponível que é o nosso caso, devemos criá-lo. No campo Name, digite AdventureWorks Catalog. Também podemos selecionar um determinado filegroup para fazer parte deste catálogo, clique em Next, conforme figura abaixo.
  10. Full-Text Search Catálogo
    Criando um catálogo no Full-Text
  11. Na próxima tela, você será perguntado para criar um cronograma para automaticamente repovoar o índice Full-Text. Se os dados são atualizados com freqüência, você vai querer fazer isso mais vezes, talvez uma vez por dia. Se ele é lido com mais freqüência que é mudado, você deve repovoar menos freqüentemente. Você pode agendar população para uma única tabela ou de um catálogo inteiro de uma vez. Aqui, você irá definir o repovoamento para que acontecer apenas uma vez para todo o catálogo clicando no botão New Catalog Schedule, conforme figura abaixo.
  12. Full-Text Search Cronograma
    Criando um cronograma no Full-Text

Neste artigo, você aprendeu como projetar e criar índices Full-Text, visando atender as necessidades de desempenho em consultas de grandes quantidades de texto.