Artigo no estilo: Curso

Do que se trata o artigo:

Nesse artigo será descrita uma estratégia para implementação do recurso de recuperação da informação em ambientes web. Será utilizada a integração entre duas soluções livres – Apache Nutch e Solr – para construção de uma máquina de busca.

Em que situação o tema útil:

A necessidade de acesso eficiente e eficaz às informações disponíveis em ambiente web é cada vez mais crucial para diferentes interesses e estratégias. A integração Apache Nutch-Solr constitui uma alternativa viável para recuperação da informação nesse contexto.

Resumo DevMan:

A necessidade pela busca da informação em ambientes web torna-se cada vez mais crítica e estratégica. E atender essa demanda de forma eficiente e eficaz constitui um desafio cuja complexidade é diretamente impactada pelo crescimento do volume de informação on-line. Frente a essa realidade, construir soluções de recuperação da informação sobre uma infraestrutura de busca web já consolidada, constitui uma abordagem segura para o provimento de um serviço dessa natureza. Nesse artigo, será apresentado como duas aplicações open source, o Apache Nutch e Solr, podem funcionar de forma integrada a fim de suportar um mecanismo de busca. Para abstração da arquitetura criada, será apresentada ainda uma pequena aplicação de interface análoga às máquinas de busca tradicionais.

Nos últimos anos, a Internet consolidou-se como a principal fonte para a busca da informação, seja ela acadêmica, comercial, de entretenimento ou de qualquer outra espécie. Para possibilitar e facilitar esse processo, uma vasta gama de portais e sites da web oferecem ferramentas, motores, mecanismos ou interfaces de busca que se propõem a levar o usuário à informação desejada [8].

Nesse contexto, a parte inicial do artigo apresentou duas soluções livres que podem ser exploradas para implementação de um mecanismo de recuperação da informação. O foco foi dado na integração de ambas as aplicações, cujo funcionamento em conjunto disponibiliza a infraestrutura necessária para o funcionamento de uma máquina de busca no âmbito da web.

A primeira solução abordada foi o Apache Nutch – uma flexível engine open source projetada para inspecionar páginas na web. Dentre suas principais funcionalidades constam a recuperação, extração de links e parser de páginas, além da indexação de dados. Na parte 1 do artigo, o Nutch foi instalado e configurado para atuar como crawler de uma engine de busca.

Na sequência, o Apache Solr foi apresentado como plataforma de consultas. Além da funcionalidade primária de retornar listas de resultados para um dado conjunto de termos consultados, o Solr disponibiliza serviços como o highlighting de termos pesquisados, navegação baseada em facets e auto-complete de queries. Da mesma forma que o Nutch, o Solr foi instalado e configurado para compor uma engine de busca.

Uma vez que ambas as soluções ficaram preparadas para funcionar em integração, foram definidas fronteiras dentro de um domínio qualquer (escolheu-se o ascii-code.com) a fim de delimitar a ação da ferramenta de busca constituída por essa parceria. Nesse ponto, algumas questões permaneceram em aberto:

· Apesar de estarem configuradas para trabalharem em conjunto, como, efetivamente, Nutch e Solr executam seus processos de forma integrada?

· Como abstrair-se a infraestrutura Nutch-Solr do usuário final através de uma interface amigável?

Assim, na sequência do artigo serão descritos os mecanismos de comunicação entre as duas ferramentas e como outras funcionalidades, nativas das próprias ferramentas, podem ser agregadas à máquina de busca proposta. Além disso, como o objetivo final é possibilitar que as informações e conteúdos de um dado domínio sejam consultados e recuperados de forma rápida, fácil e organizada [9], uma seção será dedicada a apresentar uma aplicação web, a qual será chamada de Localiza, cujo objetivo é abstrair a engine de busca e prover uma interface de consulta amigável ao usuário final.

Buscas na web com a integração Nutch-Solr

Assumindo-se que tanto o Nutch como o Solr foram adequadamente instalados e configurados em conformidade com a parte inicial do artigo, o primeiro passo para a disponibilização do mecanismo de busca envolverá a inicialização do serviço de consultas. Naturalmente, nesta etapa, não haverá qualquer dado a ser retornado em resposta a uma query, uma vez que nenhuma informação foi previamente carregada na base de dados utilizada por esse serviço.

Assim, será iniciado o servidor Jetty que, por sua vez, tornará a aplicação Solr ativa. Para isso, será efetuada uma chamada ao .jar de inicialização do Jetty. O comando executado é apresentado na Listagem 1, e o arquivo acionado encontra-se em /example, dentro do diretório de descompactação do Solr.

Listagem 1. Comando para start do Apache Solr.

java -jar start.jar

Após a execução da Listagem 1, uma maneira de verificar o correto start da aplicação é chamar sua interface de administração pelo browser. Isto pode ser feito pela URL http://localhost:8983/solr/admin/.

A Figura 1 apresenta a interface de administração do Solr que deve ser renderizada.

Figura 1. Interface de administração do Solr.

Uma vez que a aplicação de consultas está ativa, é preciso agora carregá-la com dados. Como já dito anteriormente, neste artigo essa responsabilidade foi atribuída ao Nutch. Assim, de posse das configurações definidas previamente, o próximo passo é executar o algoritmo da Listagem 2 a fim de que os dados possam ser capturados das fronteiras definidas pelos arquivos seed.txt (Listagem 3) e regex-urlfilter.txt (Listagem 4), ambos apresentados na parte 1 deste artigo. Os passos 2.1 a 2.6 da Listagem 2 podem ser executados através de uma única chamada ao script nutch do diretório NUTCH_RUNTIME_HOME/bin. A Listagem 5 apresenta o comando que deve ser acionado a fim de disparar todo o fluxo de execução do crawler Nutch. Dois aspectos deste comando merecem uma consideração antecipada:

1. O comando foi executado a partir do diretório NUTCH_RUNTIME_HOME;

2. Para fins de organização, criou-se, dentro de NUTCH_RUNTIME_HOME, o diretório crawl, que conterá as bases de dados geradas pelo Nutch.

Listagem 2. Algoritmo do fluxo básico de execução do Nutch.


   1. Injetar URLs iniciais.
   2. Executar os próximos passos LOOP vezes
   2.1. Gerar lista de URLs.
   2.2. Buscar conteúdo das páginas.
   2.3. Efetuar o parser do conteúdo de cada página.
   2.4. Atualizar CrawlDB.
   2.5. Atualizar LinkDB.
   2.6. Indexar segmentos. 

Listagem 3. Conteúdo do arquivo seed.txt de URLs inicias.

http://www.ascii-code.com/

Listagem 4. Conteúdo do arquivo regex-urlfilter.txt com fronteiras estendidas.

-^(file|ftp|mailto):
   
  -\.(gif|GIF|jpg|JPG|png|PNG|ico|ICO|css|CSS|sit|SIT|eps|EPS|wmf|WMF|zip|ZIP|ppt|PPT|mpg|MPG|xls|XLS|gz|GZ|rpm|RPM|tgz|TGZ|mov|MOV|exe|EXE|jpeg|JPEG|bmp|BMP|js|JS)$
   
  +^http://www.ascii-code.com/
  +^http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html
  +^http://www.w3.org/Protocols/rfc2616/rfc2616.html
  +^http://www.ietf.org/rfc/

Listagem 5. Comando que dispara o crawler Nutch.

bin/nutch crawl urls/ -solr http://localhost:8983/solr -dir crawl/ -depth 5 -topN 5

Foram definidos para o comando crawl da Listagem 5 os seguintes parâmetros:

· -solr: URL da aplicação Solr que receberá os dados do processo de crawler;

· -dir: nome do diretório no qual o crawler alocará os dados capturados e gerados;

· -depth: encarando os links e as páginas web como uma árvore composta de ligações e nós, respectivamente, esse parâmetro define a profundidade máxima de inspeção a ser alcançada pelo crawler nessa árvore, tendo como referência o nó-raiz, isto é, a página inicial (seed.txt). Outra maneira de entender esse parâmetro é por observar que ele define o número de repetições do fluxo de crawler – a variável de iteração (LOOP) do algoritmo da Listagem 2;

· -topN: estabelece o número máximo de páginas que serão recuperadas em cada nível (tendo em mente a mesma analogia com a estrutura de árvore do parâmetro -depth) alcançado pelo crawler.

Uma prática comumente adotada é a de definir-se, nas etapas iniciais de implantação de uma ferramenta de RI, uma profundidade reduzida de alcance do processo de crawler (novamente fazendo-se referência à analogia da web como uma estrutura de árvore), ou seja, são atribuídos aos parâmetros -depth e -topN valores significativamente menores quando comparados aos valores necessários para a inspeção completa de um domínio. Consequentemente, o número de páginas recuperadas em cada nível de varredura também é limitado. O objetivo dessa contenção inicial do crawler é o de possibilitar uma verificação de quais páginas estão sendo inspecionadas e de quais não estão sendo submetidas a esse processo. Como neste artigo o volume de páginas envolvidas no processo de crawler é bem resumido, apenas sete páginas, a definição de cinco iterações (-depth) para o processo de varredura do Nutch é suficiente para alcançar as páginas contidas nas fronteiras do processo, assim como o estabelecimento da recuperação de cinco páginas por iteração (-topN).

Conforme exposto pela Figura 2, espera-se que o processo de crawler finalize tendo como resultado a inspeção de sete páginas. Para fins de verificação dos dados obtidos por essa varredura, a Listagem 6 apresenta alguns comandos disponíveis no script bin/nutch.

Figura 2. Fluxo de inspeção do Nutch.

Listagem 6. Comandos para verificação das páginas inspecionadas pelo crawler.


  bin/nutch readdb crawl/crawldb -dump dump
  bin/nutch readdb crawl/crawldb -stats ... 

Quer ler esse conteúdo completo? Tenha acesso completo