Introdução

O Sql Server possui um mecanismo de pesquisa de texto com base na indexação de colunas de tabelas numa base de dados chamado Full-Text Search. Este mecanismo de pesquisa utiliza um catálogo de pesquisa, criado no file system, e tem uma série de vantagens relativamente às pesquisas que utilizam o predicado LIKE, entre as quais se destacam:

  • Mecanismo de pesquisa mais rápido, nomeadamente em tabelas com um grande volume de dados;
  • Possibilidade de indexar colunas do tipo image. Desta forma, torna-se possível efectuar pesquisa de texto dentro de documentos armazenados em base de dados;
  • Possibilidade de realizar pesquisas específicas para um idioma;
  • Possibilidade de incluir noise words (por idioma), um conjunto de palavras que são ignoradas numa query utilizando FTS.

Tal como referido anteriormente, o Full-Text Search usa um catálogo de pesquisa, criado no file system, para cada base de dados, onde são definidas as tabelas e respectivas colunas a indexar. Depois de criado o catálogo e para poderem ser efectuadas pesquisas sobre o mesmo, deve-se proceder à sua população. Existem duas opções de população de um catálogo de pesquisa:

  • Full Population – efectua uma população completa do catálogo de pesquisa, ou seja, são criadas entradas no índice para todas as linhas de dados das tabelas do catálogo. Deve ser executada uma vez, na primeira população do catálogo;
  • Incremental Population – efectua a actualização do catálogo com base nas alterações efectuadas desde a última população às tabelas que fazem parte do catálogo. Deve ser executada periodicamente, tipicamente 1 vez por dia.

Para se proceder à actualização do catálogo de pesquisa com uma determinada periodicidade, deve ser criado um schedule. Este procedimento dará origem à criação de um Job (é necessário ter o serviço Sql Server Agent a correr) que na periodicidade definida no schedule executará uma stored procedure de sistema (sp_fulltext_catalog) para actualizar o catálogo. O exemplo seguinte utiliza a base de dados Northwind e um catálogo chamado Northwind_Catalog:

use Northwind exec sp_fulltext_catalog ‘ Northwind_Catalog ‘, ‘start_incremental’


Actualização de múltiplos cátalogos de pesquisa

O exemplo apresentado anteriormente demonstra a utilização de catálogos de pesquisa Full-Text Search numa base de dados Sql Server. Num cenário de um sistema de informação que possua várias bases de dados de conteúdos, controlados por uma base de dados de configuração, e se pretenda actualizar de forma periódica os catálogos de pesquisa de todas as bases de dados, pode ser actualizado um mecanismo idêntico ao apresentado de seguida.

O exemplo seguinte pressupõe a existência de uma base de dados de configuração onde é armazenada a informação sobre todas as bases de dados de conteúdos existentes no sistema. Esta informação é guardada numa tabela chamada ContentDatabases com a seguinte estrutura:

  • ID – campo identity (chave primária da tabela)
  • Name – campo onde é guardada a informação do nome da base de dados de conteúdos

O nome do catálogo de pesquisa em cada base de dados de conteúdos é ContentDatabase_Catalog.

A actualização dos catálogos de pesquisa será efectuada por intermédio de uma stored procedure criada na base de dados de configuração chamada UpdateContentDatabasesCatalogs. A stored procedure é criada da seguinte forma:

CREATE PROCEDURE [dbo].[UpdateContentDatabasesCatalogs]
AS
    DECLARE @ID int
    DECLARE @Name nvarchar(50)
    DECLARE @sqlStatement nvarchar(250)

    SELECT @ID = MIN(ID) FROM [ContentDatabases]

    while @ID is not null
    begin
        SELECT @Name = [Name] FROM [ContentDatabases] WHERE ID = @ID
        SET @sqlStatement = ‘use ‘ + @Name + ‘ exec sp_fulltext_catalog N”ContentDatabase_Catalog”, N”start_incremental”’
        exec sp_executesql @sqlStatement
        SELECT @ID = min(ID) FROM [ContentDatabases] WHERE ID > @ID
    end
GO

Para finalizar, deve ser criado um Job no Sql Server para executar esta stored procedure com a periodicidade desejada.


Recursos

Para saberem mais sobre Full-Text Search podem consultar os seguintes artigos:

LEAVE A REPLY

Please enter your comment!
Please enter your name here