Вы находитесь на странице: 1из 7

Introduo

A necessidade de realizar pesquisas em campos textos semore foi uma grande realizade. Em algumas das vezes conseguimos utilizar o LIKE, um operador que realiza a busca de uma palavra ou letra dentro de um campo texto. Porm muito das vezes a consulta pode ser prejudicada, porque o ndice pode no ser utilizado. Tendo essa necessidade em mente temos um produto integrado totalmente com a engine de busca do SQL Server. O Full-Text Search permite que seja realizado pesquisas avanadas alm da capacidade tradicional de um SELECT com LIKE. A consulta que utiliza esse mecanismos poder retornar: Tempos Verbais; Resultados retornados de campos VARBINARY(MAX) podendo ser este dados armazenado como um arquivo .PDF. Sinonimos da(s) palavra(s) informadas. Sendo um recurso introduzido na verso 7.0 do SQL Server a mesma continua se aprimorando e otimizando os seus recursos. Na verso 2005 o produto no era totalmente integrado porque era necessrio ser criado uma estrutura externa para que o servio fosse habilitado.

Arquitetura
Os seguintes processos fazem parte da arquitetura para seu total funcionamento. SQL Server Process (Sqlservr.exe) = Realiza o gerenciamento dos ndices e consultas Ou seja esse servio possui total integrao com a Engine para que o Optimizer possa otimizar as consultas realizadas. Filter Daemon Host Process (Fdhost.exe) = Todos os filtros so carregados neste processo, sendo assim a instncia utiliza o processo de multithread para que os filtros sejam implementados, sendo assim idependente dos componentes, para que o SQL Server seja protegido de componentes de terceiros. SQL Full-Text Filter Daemon Launcher (Fdlauncher.exe) = Realiza a incializao do processo quando requisitado.

Os Componentes para essa arquitetura so: User Tables = Aonde ficam armazenados os dados para serem indexados. FULL-Text Gatherer = Trabalha junto com o FULL-Text Crawl. Ele responsvel pelo agendamento e populamento dos FULL-Text Indexes e monitoramento dos catlogos. Theasurus Files = Aonde ficam contidos os sinnimos. Stop List = Local aonde fica armazenado lista de palavras em comum que no sejam vlidas para pesquisa. SQL Server Query Processor = Local aonde a consulta compilada e executada. Se a consulta possuir FULL-Text a mesma enviada para a Engine do FULL-Text Engine.

Index Writer (Indexer) = O escritor de ndices que realiza a construo da estrutura que armazena os Tokens dos ndices. Filter Daemon Manager = Responsvel pelo monitoramento de Status do processo Daemon Host (Fdhost.exe).

Terminologia
O FULL-Text possui uma terminologia prpria, entenderemos a seguir quais so: Term = Uma palavra, frase ou caracter incluso na consulta. Full-Text Catalog = Um objeto virtual que representa um grupo de ndices. Quando realizado a criao de um catlogo no SQL Server 2008 o mesno no pertence a nenhum filegroup. Word Breaker = Processo que acha faixas/tokens ou seja uma padronizao para a consulta baseada no Collation do Banco de Dados. Token = Uma palavra ou caracter que define um Word Breaker. Stemmer = Um processo que realiza a conjugao de verbos baseada na Collation do Banco de Dados. Theasurus = Um XML que realiza a definio dos sinnimos. StopWord = Uma palavra que usada para adicionar um significado para a pesquisa dentro da estrutura, assim como [e, que] StopList = Objeto que realiza o gerenciamento das StopWords. No SQL Server 2008 voc pode criar suas prprias StopWords. Filter = Componente que realiza a extrao das informaes dos documentos armazenados em VARBANARY(MAX ou Image e assim manda as informaes para os WordBrakers. Population(Crawl) = Preocesso de adicionar os dados ou povo-los dentro do ndice durante a criao ou alterao do mesmo. Esse processo pode se realizar automaticamente ou manualmente. Full-Text Engine = Um componente que realiza a administrao de tarefas do processo do FULL-Text Search.

Configurao
Para a criao e gerenciamento dos full-text indexes, necessrio um entendimento bsico em relao a configurao pelo SSMS. Na instalao do SQL Server o FULL-Text Search j instalado. Para iniciar o processo de criao necessrio primeiramente que seja criado os FULL-Text Catalogs.

FULL-Text Catalogs

Os catlogos so criados para cada banco de dados porm eles no podem ser criados nos banco de dados de sistema como MODEL, MASTER, MSDB, TEMPDB. A nomenclatura para a criao dos catlogos : CREATE FULLTEXT CATALOG catalog_name [ON FILEGROUP filegroup ] [IN PATH 'rootpath'] [WITH <catalog_option>] [AS DEFAULT] [AUTHORIZATION owner_name ] <catalog_option>::= ACCENT_SENSITIVITY = {ON|OFF}

CREATE DATABASE FullTextSearch go USE FullTextSearch go CREATE FULLTEXT CATALOG CatalogoDados AS DEFAULT

FULL-Text Indexes
Depois da criao do catlogo, o prximo passo a criao do FULL-Text Indexe, para isso temos que: necessrio que exista um FULL-Text Catalog neste banco de dados. S permitido a criao de um FULL-Text Index por tabela. necessrio que na tabela tenha uma UNIQUE que no possa permitir nulos. CREATE FULLTEXT INDEX ON table_name [ ( { column_name [ TYPE COLUMN type_column_name ] [ LANGUAGE language_term ] } [ ,...n] ) ] KEY INDEX index_name [ ON <catalog_filegroup_option> ] [ WITH [ ( ] <with_option> [ ,...n] [ ) ] ] [;] <catalog_filegroup_option>::= { fulltext_catalog_name | ( fulltext_catalog_name, FILEGROUP filegroup_name ) | ( FILEGROUP filegroup_name, fulltext_catalog_name ) | ( FILEGROUP filegroup_name ) } <with_option>::= NO POPULATION ] } { CHANGE_TRACKING [ = ] { MANUAL | AUTO | OFF [, | STOPLIST [ = ] { OFF | SYSTEM | stoplist_name }

Table_Name = Nome da tabela/View aonde a estrutura ser criada. Column_Name = Nome da coluna aonde ser criado o FULL-Text Index. Type_Column = Extenso para a criao (Extenso), podendo ser VARBINARY, VARBINARY(MAX) ou IMAGE . Se a opo for especificada mais no for informado um erro ser gerado. Key Index = Definio do nome do UNIQUE INDEX solicitado pelo FULL-Text Index. FullText_Catalog_Name = O Nome lgico do catlogo. FILEGROUP = Nome do filegroup existente aonde o FUL-Text Index armazenado. Change_Tracking = Povoamento do FULL-Text Index. MANUAL = O Povoamento ser manual, sendo assim o mesmo s ser atualizado com um ALTER ou START UPDATE POPULATION. AUTO = O Povoamento ser automtico.

OFF = O SQL Server no realizar o povoamento das informaes. STOPLIST = Especifica o StopList associado com o FULL-Text Index. Se a opo no for especificada, ento ele pegar como padro a do sistema. SELECT * INTO FullTextSearch.dbo.Produto FROM AdventureWorks.Production.Product Criao Unique KEY ALTER TABLE FullTextSearch.dbo.Produto ADD CONSTRAINT PK_Produto_ProductID PRIMARY KEY (ProductID) Criao FULL-Text Index CREATE FULLTEXT INDEX ON FullTextSearch.dbo.Produto KEY INDEX PK_Produto_ProductID Unique KEY ON CatalogoDados FULL-Text Catalog WITH CHANGE_TRACKING AUTO, STOPLIST SYSTEM; STOPList do Sistema

Consultas
Depois de toda a estrutura criada, hora de realizarmos as pequisas, para que esse mecanismo funcione, podemos escolher entre CONTAINS, FREETEXT ou predicados como CONTAINSTABLE, FREETEXTTABLE que so funes. Sendo asism temos que: CONTAINS = um predicado que realiza a busca de um texto especfico na coluna. O funcionamento desse recurso similar ao predicado LIKE. - FREETEXT = Neste predicado analisado todas as palavras da frase e depois devolvido os registros que contm a frase ou algum fragmento do que foi especificado. - CONTAINSTABLE = Similar ao funcionamento do CONTAINS sendo que sua diferena que a devoluo das informaes em duas colunas a [KEY] que contm o valor da palavra chave e a informao na qual buscamos. - FREETEXTTABLE = Exatamente equivalente ao CONSTAINSTABLE, porm a pesquisa dentro do campo retornado uma busca de todas as palavras.

Aplicao
Para visualizar se o povoamento do FULL-Text Index foi realizado podemos utilizar a funo FULLTEXTCATALOGPROPERTY Se a populao estiver em progresso ento o valor mostrado ser 1. Alm disso podemos vizualizar um DMV sys.dm_fts_index_population que retorna o status do povoamento dos dados e ainda para vizualizar as colunas aonde esto os FULL-Text Indexes podemos visualizar por outra DMV sys.dm_index_columns. SELECT FULLTEXTCATALOGPROPERTY(CatalogoDados, PopulateStatus) AS StatusPo voamento; SELECT DB_NAME(database_id) AS Database Name , database_id AS DB_ID , OBJECT_NAME(table_id) AS Table Name , table_id , population_type_description AS Population Desc. , status_description AS Status Desc.

, completion_type_description AS Completion Desc. , start_time FROM sys.dm_fts_index_population; SELECT OBJECT_NAME (object_id) AS TableName , object_id , COL_NAME(object_id, column_id) AS ColumnName , column_id , COL_NAME(object_id, type_column_id) AS TypeColumn , language_id FROM sys.fulltext_index_columns;

Pesquisas
Tendo toda a estrutura criada, agora iremos fazer algumas pesquisas para analisar o comportamento do FULL-Text. SELECT * FROM FullTextSearch.dbo.Produto AS P WHERE CONTAINS(P.Name ,LL)

SELECT * FROM FullTextSearch.dbo.Produto AS P WHERE FREETEXT(P.Name ,LL)

Consultas Utilizando Conjugao e Verbo e Sinnimos. Verbo

SELECT * FROM FullTextSearch.dbo.Produto AS P WHERE FREETEXT(P.Name ,FORMSOF(INFLECTIONAL,Chainring )

Sinnimos SELECT * FROM FullTextSearch.dbo.Produto AS P WHERE FREETEXT(P.Name ,FORMSOF(THESAURUS,Race )

Como podemos ver, conseguimos realizar vrias tipos de pesquisas mais otimizadas e bem especficas com esse recurso.

Вам также может понравиться