DevMedia - asp.net, Java, Delphi, SQL e web Design, tudo em um só lugar!
Bem vindo a DevMedia!
LOGIN:     SENHA:
 
 
DevWare  
Novidade: DevMedia lança o DevWare - Saiba mais!


  Este é um post disponível para assinantes MVP
Este post também está disponível para assinantes da Java Magazine DIGITAL
ou para quem possui Créditos DevMedia.  Clique aqui para saber mais!

Artigo Java Magazine 49 - Conhecendo o Apache Lucene

Artigo publicado pela Java Magazine 49.

[fechar]

Você não gostou da qualidade deste conteúdo?

(opcional) Você gostaria de comentar o que não lhe agradou?

Esse artigo faz parte da revista Java Magazine edição 49. Clique aqui para ler todos os artigos desta edição

Conhecendo o Apache Lucene

Implemente recursos completos de pesquisa te

 

Nos últimos anos, os sites de busca se tornaram onipresentes em nossas vidas, ajudando-nos a lidar com o volume avassalador de informações da web. Essa tecnologia de recuperação de informações tem ganhado espaço também no mundo corporativo, e existem hoje no mercado soluções em software (ex.: Ultraseek, Google Search Services) e em hardware (ex.: Google Mini e Google Search Appliance), que se propõem a pesquisar páginas em intranets e arquivos em diversos formatos.

Para o desenvolvedor Java, existe uma alternativa open source que não deixa nada a dever a essas soluções proprietárias: o Apache Lucene, uma biblioteca de pesquisa textual extremamente poderosa incorporada como projeto da Apache Software Foundation em 2001.

Diversos projetos utilizam o Lucene. Exemplos são o mecanismo de busca web Nutch (um subprojeto do Lucene), o sistema de gerência de conteúdo Open- CMS, o IDE Eclipse (em seu help online) e o Hibernate Search. Veja nos links uma referência para a lista completa de projetos “Powered by Lucene”.

Neste artigo, veremos os conceitos básicos do Apache Lucene e como utilizá-lo através de uma aplicação de exemplo.

 

Lucene numa casca de noz

A pesquisa textual, como sabemos, consiste em localizar documentos que contêm uma determinada palavra ou frase. O termo “documento” é usado neste artigo de maneira ampla, referindo-se a páginas

HTML, arquivos em vários formatos, enfim, a qualquer objeto que possua texto e seja relevante para o usuário.

Um dos conceitos centrais da pesquisa textual é a indexação. De maneira simplificada, indexar é processar os documentos e colocar as suas palavras em estruturas de dados que possam ser pesquisadas rapidamente: os índices. Os índices de pesquisa textual quase sempre são listas invertidas, em que cada palavra é uma chave que aponta os documentos nos quais ocorre. A Figura 1 ilustra esse conceito.

 

Figura 1. Esquema simplificado de uma lista invertida.

 

No Lucene, o índice é composto por duas estruturas lógicas principais: documentos e campos (fields). Cada entrada no índice corresponde a um documento (org.apache. lucene.document.Document) e cada documento possui um conjunto de campos (org.apache. lucene.document.Field). Fazendo uma analogia com um banco de dados relacional, os documentos seriam como linhas numa tabela e os campos seriam semelhantes às colunas. Em outras palavras, para cada objeto que podemos pesquisar (um documento) existem diversos atributos pelos quais podemos pesquisar (campos).

Um aspecto importante da pesquisa textual é que normalmente estamos interessados apenas no conteúdo dos documentos e não na sua formatação ou estrutura de arquivo específica. Por exemplo, se tivermos um conjunto de livros sobre Java em formato PDF, não estaremos preocupados com os dados de controle e de formatação contidos nos arquivos, mas com os textos em si. Por isso é preciso extrair o texto de interesse antes de indexá-lo. (O Lucene não inclui ferramentas para fazer a extração de texto. Cabe à aplicação fazer isso antes de usar o Lucene.)

Analisando um pouco mais, veremos que mesmo o conteúdo textual de cada documento não é inteiramente relevante. Por exemplo, palavras muito comuns como “de”, “a” e “o” não precisam ser indexadas, pois ocorrem em praticamente 100% dos documentos em língua portuguesa. Além disso, algumas características da pesquisa, por exemplo discriminar maiúsculas e minúsculas e considerar caracteres acentuados, exigem o tratamento do texto antes da indexação. Este processo é chamado análise e é realizado após a extração do texto. No Lucene, a análise é feita pelas implementações da classe abstrata org. apache.lucene.analysis.Analyzer.

O Lucene fornece uma implementação default bastante razoável para a classe Analyzer, o StandardAnalyzer. Entretanto, para textos em língua portuguesa recomen- damos usar uma implementação específica. Criamos para este artigo a classe PortuguesAnalyzer, que contém uma lista de palavras comuns da nossa língua e pode ser configurada para diferenciar ou não caracteres acentuados (veremos adiante este analisador em uso). Temos assim uma visão em passos do processo de indexação:"

A exibição deste artigo foi interrompida.

  Este é um post disponível para assinantes MVP
Este post também está disponível para assinantes da Java Magazine DIGITAL
ou para quem possui Créditos DevMedia.  Clique aqui para saber mais!


É bacharel em Ciência da Computação pela UFMG, desenvolve em Java há sete anos e possui as certificações SCJP e SCWCD. Atualmente trabalha como analista de sistemas para o BDMG (Banco de Desenvolvimento de Minas Gerais), onde empregou o Lucene em um sistema de classificação e pesquisa de documentos ...
O que você achou deste post?

    3 COMENTÁRIOS

[Fechar]

Este post é fechado - você precisa ter acesso ao post para incluir um comentário.



Alexandre
onde baixo o exemplo da aplicação, não estou encontrando.
[há +1 ano] - Responder

 

Devmedia - Equipe De Moderação
Alexandre,
vc pode baixar através do link http://www.devmedia.com.br/resumo/download.asp?site=6&idrevista=9
[há +1 ano] - Responder
 

Renato Santana
Muito bom este artigo.
[há +1 mês] - Responder

 
Cursos relacionados
Publicidade
[Fechar]

Você precisa estar logado para dar um feedback.

Clique aqui para efetuar o login
[Fechar]


Este post está fechado. Saiba mais sobre a assinatura MVP!
web-03
DevMedia  |  Anuncie  |  Fale conosco
Hospedagem web por Porta 80 Web Hosting
2013 - Todos os Direitos Reservados a web-03