18 julho 2007

Mini Google Open Source - O Gênesis

Antes de mais nada, para se montar um sistema de buca, é necessário um motor de busca. Escolher um motor de busca open source numa linguagem relativamente comum (algo como Java, PHP, ASP ou C++) seria o primeiro passo nessa empreitada. Tendo Java/JSP como tecnologias emergentes no desenvolvimento de sistemas web nos dias de hoje, escolhi essas ferramentas como base do meu projeto. Uma escolha visando mais o aprendizado daquilo que o mercado atualmente pede de seus profissionais. Também estou tentando usar Struts no projeto, também como objeto de aprendizado. Para a ligação usuário/sistema era necessário escolher um servidor de aplicações que fosse compatível com Java/JSP. Nada mais óbvio que o Tomcat. Desenvolvido e mantido pela Apache Software Foundation, esse servidor web já é bastante difundido entre aqueles que desenvolvem em Java. Existem outras soluções para esse mesmo problema, como o Jetty, mas o Tomcat é a mais conhecida dentre todas elas. Escolhidas a linguagem e o servidor de aplicações, a escolha de um motor de busca se torna mais restrita. Olhando algumas revistas sobre Java na empresa onde eu estagiava, eu encontrei uma solução interessante: o Lucene. O Lucene não é um framework, onde nós apenas extendemos classes para customizar um sistema genérico pré-existente; é uma biblioteca, na qual usamos classes para montar um sistema que supre nossas necessidades. Esta biblioteca não extrai os dados passiveis de busca documentos quaisquer. Essa é uma tarefa que deve ser feita a parte, utilizando outras bibliotecas/frameworks. O Lucene apenas manipula os dados que lhe são fornecidos, previamente extraídos dos documentos a serem utilizados como alvo de busca, realizando uma indexação e provendo busca de modo fácil e modular. A questão principal que motiva a criação desse protótipo de sistema é: como criar um sistema de busca independente de conteúdo, ou ao menos extensível a algo próximo desse patamar? O Lucene tem a sua abstração de documento baseada em campos. Cada campo é preenchido por conteudo texto. Já existe algumas soluções a esse respeito, como o projeto Lius. Também usa Java e Lucene, mas não é (ao meu ver) uma aplicação web. Claro que poderia se utilizar o Lius como parte de uma arquitetura MVC, mas isso iria de encontro ao meu estudo, já que programar faz parte do aprendizado. Mas a idéia é especificar os documentos suportados pelo sistema num arquivo XML, e utilizá-lo no processo de indexação e busca. Inicialmente, meu objetivo era aprender a usar o Lucene direito, e o primeiro protótipo apenas buscava PDFs. Agora, com um pouco mais de maturidade, o sistema já foi preparado para ser genérico, ou ao menos multi-conteúdo. Ainda realiza busca apenas sobre conteúdo PDF e JPEG, mas o objetivo é, ao menos, adicionar um módulo para busca de MP3's e códigos fonte Java.
Comentários
2 Comentários

2 comments:

Anônimo disse...

Oi Leandro,

tudo bem?
Estou terminando meu curso de pós graduação na UFLA - Produção de Software Livre

Tenho a intenção em criar um software utilizando busca indexada de matéria médica - homeopática.

E através da matéria médica gerar uma repertorização dos sintomas de uma pessoa para que o sistema lhe indique o melhor remédio.

para isso, estou buscando na net algum código em Java para esta busca indexada.
Tb vou usar Struts, Hibernate e Jboss.

Caso tenha alguma dica, ou algum código que possa disponibilizar e assim contribuir para meu trabalho, eu ficaria muito grata!

Ah, o software será de licença open source ;)

Até
Aline de Castro Oliveira
Analista de Sistemas
Brasília - DF

Anônimo disse...

ah sim, caso queira entrar em contato:

acastro.oliveira@gmail.com

Postar um comentário

Regras são chatas, mas...

- Seu comentário precisa ter relação com o assunto do post;
- Em hipótese alguma faça propaganda de outros blogs ou sites;
- Não inclua links desnecessários no conteúdo do seu comentário;
- Se quiser deixar sua URL, comente usando a opção OpenID;
- CAIXA ALTA, miguxês ou erros de ortografia não serão tolerados;
- Ofensas pessoais, ameaças e xingamentos não são permitidos;