Desvendando o Full-text Search no SQL Server 2008 - Revista .Net Magazine 90

Você precisa estar logado para dar um feedback. Clique aqui para efetuar o login
Para efetuar o download você precisa estar logado. Clique aqui para efetuar o login
Confirmar voto
0
 (1)  (0)

Este artigo aborda um recurso muito interessante do SQL Server, o Full-text Search. Com o uso do Full-text é possível fazer consultas complexas não só em colunas com tipos de dados string, mas também em arquivos armazenados no banco de dados, como um arquivo word, pdf, etc.

De que se trata o artigo

Este artigo aborda um recurso muito interessante do SQL Server, o Full-text Search. Este recurso faz parte do SQL Server desde a versão 7.0, foi muito melhorado na versão 2005 e surpreende na versão 2008! Com o uso do Full-text é possível fazer consultas complexas não só em colunas com tipos de dados string, mas também em arquivos armazenados no banco de dados, como um arquivo word, pdf, power point etc.

Em que situação o tema é útil

Imagine a seguinte situação: você é o proprietário de um site de artigos esportivos e deseja que quando o seu cliente digitar o termo “correr” para pesquisar produtos, a consulta retorne também produtos que possuam em sua descrição as palavras “corrida”, “performance”, “correndo”, “pista” e “atletismo”. Este tipo de consulta, mais complexa e com muitas possibilidades é realizada com o recurso chamado Full-text.

Desvendando o Full-text Search

Neste artigo conheceremos o full-text através de seus componentes, como usá-los e como integrá-los. Para fazer bom uso do recurso é preciso conhecer as suas possibilidades, que são apresentadas neste artigo. Observe que em todas as listagens existem explicações sobre os termos que devem ser substituídos e quando sevem ser usados. De posse destes conhecimentos o leitor poderá usar o full-text de maneira muito mais efetiva.

Falar sobre full-text é falar sobre um recurso do SQL Server que possibilita pesquisas complexas em conteúdos textuais. Com este recurso é possível pesquisar informações dentro de colunas com conteúdo do tipo char, varchar, nchar, nvarchar, text, ntext, image, xml, varbinary e varbinary(max) (imagine pesquisar informações em documentos armazenados no banco de dados, como um arquivo Word).

O full-text existe desde a versão 7.0 do SQL Server, mas foi na versão 2005 que este recurso foi amadurecido e pode-se dizer que caiu no gosto dos desenvolvedores e DBAs. Mas na versão 2005 ainda existiam problemas porque o full-text era um recurso externo (era tratado como arquivos do banco de dados) ao SQL Server, fato que dificultava o gerenciamento da segurança, por exemplo. Com o SQL Server 2008 o full-text passou a estar totalmente integrado à engine de banco de dados. Realmente existem serviços externos ao full-text, mas a engine do full-text search agora faz parte do serviço do SQL Server.

Nota: Filegroups são coleções nomeadas de arquivos. Dentro de um filegroup temos os arquivos de dados do SQL Server. Em uma instância podemos ter um ou vários filegroups dependendo da estratégia de instalação adotada.

E se não for possível usar o full-text, como as consultas podem ser feitas? Sem o full-text a melhor maneira de efetuar consultas em campos do tipo string (char, varchar, nchar, nvarchar, text, ntext) era usando o operador LIKE, na cláusula WHERE do seu comando. Contudo o uso do operador LIKE é muito lento, possui poucas opções, não possibilita buscas muito complexas, e dependendo do uso este operador não utiliza os melhores planos de execução podendo ignorar os índices criados.

A pesquisa full-text é bem rápida porque é baseada em índices full-text. Estes índices não são como os outros índices criados na base de dados, não são baseados na estrutura B-Tree habitual, são baseados em tokens (pedaços de palavras) e possuem uma estrutura bem particular o que faz com que as suas consultas sejam muito rápidas mesmo quando existem necessidades complexas como pesquisar todas as linhas da tabela de produtos, onde na coluna descrição, a palavra “tênis”, esteja próxima da palavra “running”, ou então pesquisar todas as linhas da tabela de produtos onde na coluna descrição existam variações da palavra “corrida”. Estes dois tipos de consultas são quase impossíveis de serem feitas com o operador like, e se forem feitas, com certeza serão tão lentas e consomem tantos recursos que são consultas inviáveis.

Mais uma vez vou ressaltar que no SQL Server 2008 a pesquisa full-text (que é proveniente do Full-text Search Engine – responsável por manipular todas as funções de indexação e pesquisa) é totalmente integrada ao processador de consultas do SQL Server.

Componentes do Full-text

Um componente do full-text que merece destaque é o host daemon de filtro (serviço fdhost.exe), responsável por carregar os componentes usados pelo índice e consulta. Os principais componentes usados para indexação e consulta full-text são: decompositores de palavras (usados para localizar o limite das palavras), os identificadores de raiz de palavras (auxiliam na conjugação dos verbos) e os filtros de documento (usados para extrair informações textuais de dados binários).

Nota: Na versão 2008 do SQL Server, cada instância possui o seu conjunto de decompositores de palavras, identificadores de raiz de palavras e filtros.

Com o SQL Server 2008, existem decompositores de palavras para mais de 40 idiomas. Para obter a lista dos idiomas suportados basta executar a seguinte sentença SQL:

SELECT * FROM sys.fulltext_languages

O idioma escolhido para a coluna que será indexada determinará a maneira como o texto será analisado. Outro fato que merece ser lembrado, é que todas as colunas indexadas com um índice full-text e listadas em uma cláusula de uma das funções de pesquisa full-text (as funções de pesquisa, serão citadas logo mais neste artigo) devem possuir o mesmo idioma, ou a opção LANGUAGE deve ser usada.

"

A exibição deste artigo foi interrompida :(
Este post está disponível para assinantes MVP

 
Você precisa estar logado para dar um feedback. Clique aqui para efetuar o login
Receba nossas novidades
Ficou com alguma dúvida?