Buscas textuais com Apache Lucene
Conheceremos neste artigo a biblioteca Lucene.Net, utilizada para realização de buscas textuais de alta precisão e desempenho com o Apache Lucene, solução utilizada por grandes empresas como Amazon e Twitter.
Autores: Wanderley Panosso e Paulo Quicoli
Com o crescimento da Web e da Computação em Nuvem, fica cada vez mais óbvio um grande desafio presente quando o objetivo é desenvolver softwares que possam atender a demandas reais, porém inimagináveis em um passado não muito distante: pesquisas eficiente e de alto desempenho. Devido ao grande volume de informação complexa existente, somado à quantidade de usuários que utilizariam simultaneamente esses softwares, executar pesquisas relevantes e em tempo satisfatório não é mais uma tarefa simples e muitas vezes pode vir a ser um fator determinante para a aceitação dos usuários.
O fato é que em geral SGBDs (Sistemas Gerenciadores de Bancos de Dados) convencionais normalmente não são mais o suficiente para armazenar e ao mesmo tempo executar pesquisas nos volumes de dados existentes e acabam se tornando um dos maiores gargalos para a escalabilidade em sistemas que requerem tais habilidades. Imagine, por exemplo, motores de pesquisa web como Google e Bing dependendo de bancos de dados relacionais famosos no mercado. Agora imagine milhões de usuários executando consultas em um período menor que um segundo e esperando receber resultados ordenados pelas informações mais relevantes sobre os termos pesquisados em um tempo aceitável. Provavelmente qualquer SGBD relacional não seria capaz de executar tal tarefa e o motivo é que eles simplesmente não são feitos para isso, já que são projetados primeiramente para garantir a integridade das informações, o que é quase sempre feito por meio de transações.
Por isso, para resolver esses problemas é primordial utilizar um motor de pesquisa (Search Engine) ou sistema de recuperação de informação (Retrieval Information System). Esse tipo de solução objetiva garantir que pesquisas em grandes volumes de informação possam ser executadas satisfatoriamente. Um ponto fundamental a ser compreendido é que esse tipo de solução normalmente tem como objetivo primário indexar grandes volumes de informações a serem pesquisadas, caso a integridade das informações seja de extrema importância é imprescindível que as mesmas também sejam armazenadas em outros meios como bancos de dados tradicionais, por exemplo. Isso ficará mais claro ao decorrer desse artigo.
No caso de Google e Bing, estes possuem soluções próprias e customizadas para atender todas as necessidades dos enormes ecossistemas ao qual eles pertencem, porém existem várias outras soluções de sistemas de recuperação de informações que resolvem a maioria dos problemas relacionados a pesquisas em grandes volumes de informação que podem ser utilizados no desenvolvimento de várias soluções de software.
Este artigo trata especificamente do Apache Lucene, uma biblioteca de busca textual que permite executar pesquisas de alto desempenho em volumes não triviais de informações. Lucene é open source e está licenciada sob a licença Apache, o que permite sua utilização tanto em softwares de código aberto como em aplicações comerciais sem nenhum problema legal. Lucene também é utilizada em vários sistemas de grande porte mundialmente conhecidos, como é o caso da Amazom e do Twitter que recebem até vários milhares de consultas por segundo, dependendo da hora e do dia. Um outro nome que está se tornando mundialmente conhecido, pelo menos entre desenvolvedores de software, é Elasticseach, uma plataforma online especialista em indexação e consultas de grandes volumes de dados, utilizada pelo portal globo.com, e que também utiliza Apache Lucene como seu motor de pesquisas.
Índices
Uma das peças fundamentais de motores de pesquisa textual são os índices. Esses motores coletam as informações a serem indexadas, as processam e criam estruturas específicas que permitem a execução de consultas com performance superior a outros tipos de consultas que não fazem uso dessas técnicas. Essas estruturas são chamadas de índices. Sem indexar as informações, executar qualquer tarefa seria muito custoso, visto que seria necessário verificar todo o conteúdo da base de informações através da força bruta, o que causaria lentidão em casos onde a quantidade de dados é muito extensa. Por exemplo, executar uma pesquisa na web seria impraticável.
Existem várias abordagens para a criação de índices dependendo do tipo de informação a ser indexado, porém, no caso de informação textual, a abordagem mais utilizada é conhecida como Índice Invertido (Inverted Index). Um índice invertido, demonstrado na Figura 1, é basicamente uma lista de termos associada aos documentos onde esses termos foram encontrados e que deveriam ser retornados caso o termo se enquadre nos critérios da pesquisa.
Figura 1. Exemplo ilustrativo de um Índice Invertido
Como demonstra essa figura, todos os documentos são processados, analisados e têm seus termos extraídos e adicionados a uma lista onde cada elemento armazena os Ids dos documentos que contêm aquele termo. Caso o termo já exista na lista, o Id do documento é adicionado à sua lista de documentos. Isso permite que pesquisas sejam executadas com muito mais rapidez, já que é necessário apenas pesquisar uma lista estruturada com os possíveis resultados das pesquisas já pré-resolvidos, caso contrário seria necessário abrir todos os documentos, verificar seus conteúdos e caso encontrado o que se deseja, adicioná-los a uma lista temporária que se tornaria o resultado da pesquisa.
Note que a Figura 1 é apenas uma ilustração simples de como um índice realmente se parece, e abstrai muitas complexidades existentes em uma implementação realista. Por exemplo, a lista de documentos não armazena apenas o Id dos documentos, mas também o tamanho do documento e informações sobre cada ocorrência do termo encontrado, tais como suas posições iniciais, finais e tamanho, para que consultas mais detalhadas possam ser executadas posteriormente, como é o caso de consultas que buscam por documentos iniciando ou terminando com determinados termos. "
[...] continue lendo...Artigos relacionados
-
Artigo
-
Artigo
-
Artigo
-
Artigo
-
Artigo