Turbine suas buscas: O Hibernate Search é um framework cujo objetivo principal é habilitar o uso de buscas textuais em aplicações baseadas em JPA/Hibernate. As configurações de indexação são quase que totalmente baseadas em anotações, e a integração com o Lucene é executada de forma automática e transparente. Já o Apache Tika é uma biblioteca que provê uma API unificada para extração de conteúdo em diversos tipos de arquivos binários. É possível integrar ambos os frameworks através do mecanismo de bridges provido pelo Hibernate Search.
Este artigo apresenta os componentes necessários para construção de um mecanismo de busca, e discute brevemente o papel do Apache Lucene neste contexto. Em seguida, o Hibernate Search é apresentado, mostrando como integrar o Lucene com o popular framework de persistência Hibernate. Por fim, discute-se também o Apache Tika, e como é possível explorar suas funcionalidades de extração de conteúdo de arquivos binários em conjunto com o Hibernate Search e o Lucene.
Em que situação o tema é útil: Este tema pode ser útil em diversas situações. Primeiro, toda aplicação baseada em JPA/Hibernate que
possui requisitos de mecanismos de buscas textuais pode se beneficiar do uso do Hibernate Search, em detrimento do uso direto do Lucene. Em segundo lugar, aplicações que
precisam extrair conteúdo de arquivos binários, tais como PDFs e DOCs, pode utilizar a API do Apache Tika para tal. Por fim, aplicações que possuem ambos os requisitos podem
se beneficiar da integração dos dois frameworks, tal como apresentado neste artigo.
O grande volume de informações a que temos acesso gera uma crescente necessidade de mecanismos de buscas que sejam eficientes, precisos e confiáveis. Encontrar a informação desejada em um computador pessoal deixou de ser simplesmente uma questão de navegar para o diretório correto, e hoje envolve poderosos mecanismos de indexação e buscas, tais como o “Spotlight” da Apple e o finado Google Desktop. Esse problema é elevado a sua última potência quando o problema de encontrar o que se deseja é transportado para a Web e suas bilhões de páginas. Ainda que existam poderosos mecanismos de busca, tais como o Google e Bing, muitas vezes não conseguimos encontrar o que procuramos, ou perdemos páginas que gostaríamos de rever.
Nas últimas edições da revista esse assunto tem sido abordado extensivamente. Por exemplo, na edição 104, foi publicado um artigo de nossa autoria dissecando o Lucene, um poderoso framework que auxilia na construção de mecanismos de buscas em aplicações Java. Já as edições 106 e 107 tratam dos projetos Apache Nutch e Solr, voltados, respectivamente, para varreduras na Web e implementação de um servidor de buscas.
Esta edição retoma o assunto e apresenta dois outros projetos: o Hibernate Search e o Apache Tika. O primeiro é um projeto que tem como objetivo a integração do Hibernate com o Lucene, enquanto o segundo pode ser utilizado para a extração de conteúdo de uma infinidade de formatos de arquivos.
Iniciamos apresentando o Hibernate Search através da construção de uma aplicação de cadastro de currículos. Em seguida, falamos brevemente sobre o Tika, e, por fim, mostramos como ambos podem trabalhar em conjunto. Entretanto, antes de iniciar, vamos revisar rapidamente os passos necessários para implementar buscas em nossas aplicações.
Mecanismos de buscas e o Lucene
Normalmente, a implementação de mecanismos de buscas nas aplicações seguem uma mesma estrutura, cuja visão em alto nível pode ser observada na Figura 1. Em um extremo da figura temos o conteúdo propriamente dito, e em outro, os usuários que desejam realizar pesquisas sobre esse conteúdo. Para que a busca seja feita de forma eficiente, os mecanismos de busca baseiam-se nos chamados índices, que são estruturas de dados que permitem que os termos pesquisados sejam encontrados rapidamente, assim como a localização desses termos dentro do conteúdo.
É comum dividirmos as aplicações de busca em dois grandes grupos de funcionalidades: a construção do índice e as consultas que são realizadas com o seu auxílio.
Para a construção do índice, o primeiro passo consiste na etapa de aquisição do conteúdo. Por exemplo: o Google possui robôs, chamados de crawlers, que navegam pela Web a procura de novas páginas a serem indexadas. Uma vez obtido o conteúdo, eles são transformados nos chamados “documentos”, que nada mais são que representações canônicas, definidas pelo mecanismo de busca, e que representam o conteúdo obtido. Por exemplo: as buscas embutidas nos sistemas operacionais são capazes de encontrar palavras-chave em arquivos PDF, documentos Word ou até mesmo em mensagens armazenadas em clientes de e-mail. Portanto, nesta etapa do processo de indexação, todos esses diferentes tipos de documentos são convertidos para um formato comum, composto por um conjunto de campos padronizados, tais como autor, data de criação e o próprio conteúdo.
Em seguida, esses documentos são analisados a fim de tornar o índice mais efetivo. Alguns processamentos simples, tais como a conversão de maiúsculas para minúsculas, e a eliminação de conectivos, tais como “a”, “e” e “ou”, são comuns durante essa etapa. Todavia, procedimentos mais complexos também são utilizados. Por exemplo, é possível que as palavras sejam processadas a fim de reduzi-las à sua raiz morfológica. Assim, termos como “computação” e “computadores” são transformados em uma raiz comum, “computa”, permitindo que termos relacionados sejam encontrados. O resultado da análise é um conjunto de tokens, que são as “palavras” que efetivamente farão parte do índice. Esta etapa é uma das mais importantes do processo de indexação, podendo determinar o sucesso ou o fracasso da aplicação. Por fim, a última etapa do processo de indexação alimenta o índice com os tokens obtidos a partir do documento analisado.
Já no outro extremo da arquitetura temos os usuários, que interagem com a aplicação através de uma interface na qual ele entra com a busca desejada. Em seguida, há uma etapa em que a entrada do usuário é convertida para uma consulta em um formato definido pelo mecanismo de busca. Como uma analogia, pense na conversão de um filtro para uma consulta SQL a ser executada em um banco de dados.
A consulta é então executada utilizando como auxílio o índice construído anteriormente. É importante ressaltar novamente a importância do índice para uma execução eficiente da consulta. Sem ele, as buscas teriam que varrer todo o conteúdo em busca da informação requerida. Em um programa de e-mail ou em seu Desktop, o tempo necessário para essa varredura pode ser aceitável, mas para a Internet é inviável imaginarmos essa situação. Por fim, os resultados são finalmente apresentados para o usuário, geralmente ordenados por relevância ou outro critério que facilite localizar a informação desejada.
A Figura 1 mostra também as etapas deste processo que são o foco do Lucene. A próxima seção discute brevemente como utilizar o Lucene diretamente, mas o objetivo deste artigo é mostrar como o seu uso pode ser simplificado e flexibilizado através dos frameworks Hibernate Search e Apache Tika.
Hibernate Search
O uso de bancos de dados relacionais aliados a frameworks para seu gerenciamento, tais como o Hibernate, são praticamente onipresentes (ubíquos) em nosso dia-a-dia como desenvolvedor. Ao mesmo tempo, requisitos de execução de buscas textuais complexas em tabelas no banco de dados estão se tornando cada vez mais comuns. Este tipo de busca normalmente não pode ser expressa através de consultas SQL, ou, se expressas, são pesadas e ineficientes.
...Confira outros conteúdos:
Black November
Desconto exclusivo para as primeiras 200 matrículas!
Pagamento anual
12x no cartão
De: R$ 69,00
Por: R$ 54,90
Total: R$ 658,80
Garanta o desconto
- Formação FullStack Completa
- Carreira Front-end I e II, Algoritmo e Javascript, Back-end e Mobile
- +10.000 exercícios gamificados
- +50 projetos reais
- Comunidade com + 200 mil alunos
- Estude pelo Aplicativo (Android e iOS)
- Suporte online
- 12 meses de acesso
Pagamento recorrente
Cobrado mensalmente no cartão
De: R$ 79,00
Por: R$ 54,90 /mês
Total: R$ 658,80
Garanta o desconto
- Formação FullStack Completa
- Carreira Front-end I e II, Algoritmo e Javascript, Back-end e Mobile
- +10.000 exercícios gamificados
- +50 projetos reais
- Comunidade com + 200 mil alunos
- Estude pelo Aplicativo (Android e iOS)
- Suporte online
- Fidelidade de 12 meses
- Não compromete o limite do seu cartão
<Perguntas frequentes>
Nossos casos de sucesso
Eu sabia pouquíssimas coisas de programação antes de começar a estudar com vocês, fui me especializando em várias áreas e ferramentas que tinham na plataforma, e com essa bagagem consegui um estágio logo no início do meu primeiro período na faculdade.
Estudo aqui na Dev desde o meio do ano passado!
Nesse período a Dev me ajudou a crescer muito aqui no trampo.
Fui o primeiro desenvolvedor contratado pela minha
empresa. Hoje eu lidero um time de desenvolvimento!
Minha meta é continuar estudando e praticando para ser um
Full-Stack Dev!
Economizei 3 meses para assinar a plataforma e sendo sincero valeu muito a pena, pois a plataforma é bem intuitiva e muuuuito didática a metodologia de ensino. Sinto que estou EVOLUINDO a cada dia. Muito obrigado!
Nossa! Plataforma maravilhosa. To amando o curso de desenvolvimento front-end, tinha coisas que eu ainda não tinha visto. A didática é do jeito que qualquer pessoa consegue aprender. Sério, to apaixonado, adorando demais.
Adquiri o curso de vocês e logo percebi que são os melhores do Brasil. É um passo a passo incrível. Só não aprende quem não quer. Foi o melhor investimento da minha vida!
Foi um dos melhores investimentos que já fiz na vida e tenho aprendido bastante com a plataforma. Vocês estão fazendo parte da minha jornada nesse mundo da programação, irei assinar meu contrato como programador graças a plataforma.
Wanderson Oliveira
Comprei a assinatura tem uma semana, aprendi mais do que 4 meses estudando outros cursos. Exercícios práticos que não tem como não aprender, estão de parabéns!
Obrigado DevMedia, nunca presenciei uma plataforma de ensino tão presente na vida acadêmica de seus alunos, parabéns!
Eduardo Dorneles
Aprendi React na plataforma da DevMedia há cerca de 1 ano e meio... Hoje estou há 1 ano empregado trabalhando 100% com React!
Adauto Junior
Já fiz alguns cursos na área e nenhum é tão bom quanto o de vocês. Estou aprendendo muito, muito obrigado por existirem. Estão de parabéns... Espero um dia conseguir um emprego na área.
Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.