lt="" src="/loja/img/Capa_SQL44_G.gif" align="bottom" border="0" hspace="0">

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))),

11.     [DocumentSummary] [nvarchar](max) NULL,

12.     [Document] [varbinary](max) NULL,

13.     [ModifiedDate] [datetime] NOT NULL CONSTRAINT [DF_Document_ModifiedDate]

14.     DEFAULT (getdate()),

15. CONSTRAINT [PK_Document_DocumentID] PRIMARY KEY CLUSTERED([DocumentID] ASC)

16. ) ON [PRIMARY]

 

Como foi dito no início do artigo, 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.

Neste tópico, apresentarei alguns scripts que utiliza estes comandos para criar catálogos e índices full-text através do Query Editor.

Para abrir o Query Editor, estando no SSMS ou SSMSE, selecione o menu Fileà New Query e crie uma conexão com o servidor onde deseja criar os catálogos e índices full-text.

O primeiro passo quando estamos configurando o full-text em um banco de dados pelo Query Editor é a criação do catálogo através do comando CREATE FULL TEXT CATALOG. Na Listagem 3 podemos ver um script que cria o catálogo FTC_AdventureWorks para o banco de dados AdventureWorks.

Nas linhas 1 e 2 simplesmente dizemos ao SQL Server para estabelecer uma conexão com o banco de dados AdventureWorks. Nas linhas 4 e 5 informamos a criação do catálogo FTC_AdventureWorks no filegroup FG_FullText. No SQL Server 2005 você tem a opção de poder criar o catálogo do Full-Text em um filegroup específico. Isso se torna interessante uma vez que você pode separar os dados do catálogo dos demais dados do banco e facilitar o procedimento de backup e restore do catálogo, podendo fazer backup e restore apenas do filegroup que mantém o catálogo full-text. No entanto, se você decidir colocar o catálogo do full-text em um filegroup específico, este não poderá estar vazio, ou seja, você terá que criar também um arquivo de dados dentro deste filegroup. O script para a criação do filegroup e do arquivo pode ser visto na Listagem 4.

Voltando ao script da Listagem 3, uma atenção especial deve ser dada para a linha 7. A cláusula IN PATH permite que você informe onde deseja que o catálogo e índices full-text sejam armazenados, sendo o default em \MSSQL.1\MSSQL\FTDATA. Neste exemplo, estamos assumindo o caminho default, por isso a linha 7 foi comentada.

Para finalizar, na linha 8 estamos informando ao SQL Server que nossas pesquisas não serão sensíveis a acentos, ou seja, “joao” será o mesmo que “joão”, assim como “Abóbora” será o mesmo que “abobora", etc. A opção DEFAULT na linha 9 diz ao SQL Server que esta será o catálogo default, ou seja, quando você criar um índice full-text sem especificar um catálogo, este será armazenado no catálogo FTC_AdventureWorks.

 

Listagem 3. ...

Quer ler esse conteúdo completo? Tenha acesso completo