Clique aqui para ler esse artigo em PDF.
Clique aqui para ler todos os artigos desta edição
Banco de Dados
SQL Server 2005 Full-Text Search (Parte II)
Configurando o Full-Text Search para português e pesquisando em documentos
Na primeira parte deste artigo (veja SQL Magazine edição 41) vimos que o suporte à linguagem Transact-SQL fornecido pelo SQL Server permite que você realize pesquisas em dados armazenados em colunas do tipo char, nchar, varchar, nvarchar, text e ntext. No entanto, o grande problema é quando você precisa pesquisar frases ou palavras em documentos, ou pesquisar não apenas por uma palavra ou frase exata, mas também por suas variantes verbais (exemplo: correr, correndo, correu). Vimos então que o Full-Text Search é a solução para estes problemas.
No artigo anterior também descrevemos passo-a-passo como instalar o Full-Text no SQL Server 2005, configurá-lo em um banco de dados, criar e administrar catálogos e índices full-text usando o SQL Server Management Studio, e ainda como realizar pesquisas utilizando os predicados CONTAINS, CONTAINSTABLE, FREETEXT e FREETEXTTABLE.
Quem possui a edição Advanced Services do SQL Server Express e já tentou criar índices Full-Text via tela gráfica, certamente teve uma triste surpresa. Isso porque infelizmente a interface gráfica para criação ou administração dos catálogos full-text não está disponível nesta edição. Entretanto, os catálogos e índices full-text também podem ser criados através dos novos comandos DDL que estão disponíveis em qualquer edição do SQL Server 2005. Sendo assim, neste artigo será mostrado como configurar e administrar o Full-Text, catálogos e índices usando comandos Transact-SQL através do Query Editor. Partiremos então para tópicos mais avançados e veremos como configurar o Full-Text para trabalhar com o idioma português (uma necessidade comum já que nossos dados estão armazenados no idioma português), como configurá-lo para realizar pesquisas em documentos .pdf – incluindo a instalação do filtro para pdf, e o passo-a-passo de como pesquisar por palavras ou frases em documentos – uma das principais funcionalidades do Full-Text Search.
Criando índices e catálogos Full-Text via Transact-SQL
No artigo anterior vimos que, antes de configurar o Full-Text em um banco de dados, é preciso primeiramente ativá-lo para suporte ao Full-Text. No SQL Server 2005, podemos criar um índice full-text para uma tabela usando tanto o SQL Server Management Studio (SSMS) ou os novos comandos de DDL do SQL Server 2005. No primeiro artigo da série vimos como fazer isso usando o SSMS. Neste artigo veremos como fazer isso usando as novas DDL do SQL Server 2005. Veremos que quando criamos o banco de dados utilizando o comando CREATE DATABASE através do Query Editor (estarei utilizando o Query Editor nos exemplos deste artigo) ou qualquer outra ferramenta de execução de scripts Transact-SQL, o banco de dados é automaticamente ativado para o suporte ao Full-Text, diferente do que acontece quando o criamos através do SSMS.
Para aqueles que possuem maior intimidade com o Query Editor ou não possui acesso à ferramenta gráfica de configuração do full-text, as tarefas de verificação, ativação e desativação do Full-text em um banco de dados podem ser executadas através de um conjunto de comandos Transact-SQL, conforme apresentado na Listagem 1.
Listagem 1. Script para ativar, desativar e verificar o status do Full-Text no banco de dados.
-- Verifica se o banco está ativado para Full-Text
-- 0 = Não ativado para Full-text
-- 1 = Ativado para Full-text
SELECT DATABASEPROPERTY('AdventureWorks','IsFulltextEnabled') AS IsFulltextEnabled
-- Ativa o banco de dados para Full-Text
USE AdventureWorks
GO
sp_fulltext_database 'enable'
-- Desativa o Full-Text no banco de dados
USE AdventureWorks
GO
sp_fulltext_database 'disable'
Devemos lembrar que como parte da criação de um índice full-text, devemos especificar um banco de dados que esteja ativado para full-text search, uma tabela (ou tabelas) e a coluna (ou colunas) que formarão o índice full-text. No mais, somente colunas do tipo char, nchar, varchar, nvarchar, text, ntext, image, xml e varbinary(max) podem ser indexadas para full-text search. Como exemplo, vamos usar neste artigo a mesma tabela do artigo anterior, criando índices full-text sobre as colunas DocumentSummary e Document da tabela Production.Document do banco de dados AdventureWorks. A estrutura da tabela é apresentada na Listagem 2.
Observe que a tabela mantém os requisitos necessários para a criação de um índice full-text: possui uma chave primária PK_Document_DocumentID (linha 15) que é composta apenas pela coluna DocumentID e as demais colunas possuem os tipos de dados apropriados, sendo a Document do tipo varbinary(max). Esta será a coluna que usaremos para armazenar os documentos e posteriormente executar as pesquisas.
Listagem 2. Estrutura da tabela Production.Document .
1. CREATE TABLE [Production].[Document](
2.[DocumentID] [int] IDENTITY(1,1) NOT NULL,
3.[Title] [nvarchar](50) NOT NULL,
4.[FileName] [nvarchar](400) NOT NULL,
5.[FileExtension] [nvarchar](8) NOT NULL,
6.[Revision] [nchar](5) NOT NULL,
7. [ChangeNumber] [int] NOT NULL CONSTRAINT [DF_Document_ChangeNumber]
8. DEFAULT ((0)),
9. [Status] [tinyint] NOT NULL CONSTRAINT [CK_Document_Status] CHECK
10. (([Status]>=(1) AND [Status]<=(3))),
" [...] continue lendo...