Artigo Java Magazine 49 - Conhecendo o Apache Lucene

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

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

Clique aqui para ler esse artigo em PDF.

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 " [...] continue lendo...

Artigos relacionados