Apache Lucene Sistemas de busca com técnicas de Recuperação de Informação
Marco ReisPrefácio
A internet mudou a forma como vivemos e hoje utilizamos as ferramentas de busca para tudo no nosso cotidiano. Em grande parte, esse sucesso se deve a ferramentas como o Google, Yahoo! e o Bing da Microsoft.
Não é necessário ir à biblioteca fazer pesquisas, ler um livro ou olhar uma enciclopédia, porque esses recursos estão disponíveis na internet. Se você quiser saber sobre um assunto é só pesquisá-lo em um buscador. Existe uma urgência por informação, inclusive com implicações financeiras. A informação tem uma posição central na sociedade moderna.
Mas o usuário não busca apenas texto. Ele também busca imagem, som, vídeo, mapas e recomendações. Até mesmo as pesquisas textuais sofreram mudanças. Ela deve incluir sinônimos, correção ortográfica e até tradução. Além da busca geral em toda a internet, temos buscadores especializados em artigos acadêmicos, empregos, redes sociais, imagens e até ciências. Existem muitas possibilidades para criar soluções interessantes para o usuário, que vão além da simples busca por palavra-chave.
A seguir vamos listar outros buscadores relevantes que temos atualmente. Ok, o mais usado certamente é o Google, mas temos algumas surpresas. Veja:
* Google Scholar: busca em artigos científicos;
* YouTube: um dos buscadores mais usados;
* DuckDuckGo: ótima alternativa para navegação anônima;
* Wolfram Alpha: utiliza mecanismos de inteligência artificial para responder perguntas;
* Twitter: análise em tempo real das tendências;
* Facebook: forte concorrente do Google no mercado de buscas e vídeos;
* LinkedIn: além da rede social, tem um mecanismo de busca por perfis profissionais.
E temos muitos buscadores por um motivo. Neste último século houve um grande aumento na quantidade de informação disponível e o ser humano tem o desejo natural de compartilhar esse conhecimento. A internet acabou sendo o meio mais eficiente para armazenar esse conteúdo. Mas, sem uma boa ferramenta de busca, como iríamos encontrar o que queremos ou precisamos? Mais do que isso, para que serve a informação que não pode ser encontrada?
A mesma situação acontece nas empresas. Elas estão criando cada vez mais informação. Um exemplo simples é o log dos sistemas web. Verifique a quantidade diária de log gerado pelas aplicações. Mas esse tipo de informação só é armazenado porque existe um motivo que justifique o custo. Não é apenas para encontrar erros do sistema. Podemos utilizar para atividades mais interessantes como entender o comportamento do usuário. Em todos os casos, precisamos de uma boa ferramenta de análise que encontre exatamente a informação que procuramos entre milhões (muitas vezes bilhões) de linhas. E isso deve acontecer em milésimos de segundo.
Ferramentas com grande volume de dados como Twitter, LinkedIn e Evernote têm equipes específicas para desenvolvimento de novas funcionalidade de busca para melhorar a qualidade de seu serviço. São casos em que lidamos com milhões de usuários, com busca em tempo real, sistemas de recomendação e autocompletar.
Meu interesse pela área surgiu de uma necessidade parecida. Eu trabalho em um tribunal e a quantidade de informação gerada é incrível. São centenas de milhares de documentos sendo criados diariamente. Tudo isso é conhecimento. São profissionais especializados trabalhando em uma área crítica da sociedade. Percebi que existia uma dificuldade grande para encontrar os documentos depois de algum tempo. Em função dessa demanda comecei a pesquisar soluções de busca e encontrei várias ferramentas interessantes. Este livro vai tratar de uma delas, que é o Apache Lucene. Mas existem ferramentas auxiliares ou complementares como o Nutch, que será estudado neste livro, e outras que não veremos, como o Solr, o OpenNLP, o Hadoop e o Cassandra. Talvez em um próximo livro.
Falaremos da necessidade de informação do usuário moderno, que está acostumado a encontrar o que procura em ferramentas como o Google ou Bing, com todas as suas facilidades. O usuário quer a mesma funcionalidade de busca nos seus sistemas. Windows ou Mac OS, sistema de RH, ERP, CRM, no sistema da locadora ou qualquer aplicação que você esteja desenvolvendo nesse momento. Mesmo que seu usuário não esteja esperando, você pode disponibilizar uma boa ferramenta de busca e surpreendê-lo.
Quem deve ler este livro
Este é um livro técnico, com código-fonte e conceitos intermediários sobre programação. O ideal é que o leitor tenha conhecimento em Java. Não é necessária muita experiência, mas seria bem proveitoso se você se sentisse confortável com conceitos como Orientação a Objetos e Lógica de Programação. Também não é essencial, mas saber um pouco sobre banco de dados relacional e normalização de dados pode ajudar, porque alguns exemplos comparam o Lucene com um banco de dados, mostrando as vantagens e desvantagens de cada um. Em algumas seções falamos sobre JPA e JSF, apenas para gravar os dados simulando uma aplicação real.
O conteúdo é extenso e pode ser aproveitado por diversos perfis profissionais:
* Programadores: em última instância, são os responsáveis pela implementação do código disponível neste livro;
* Gerentes de projeto: podem utilizar este conteúdo para enriquecer funcionalidades já existentes nos projetos ou até mesmo propor novas aplicações diferentes e mais avançadas que os sistemas tradicionais;
* Arquitetos de software: são estudados muitos casos de integração e arquitetura de motores de busca. A equipe de arquitetura pode encontrar soluções interessantes para os problemas do cotidiano;
* DBAs: as ferramentas e soluções estudadas no livro podem ser complementares aos bancos de dados tradicionais e são úteis em tarefas que exigem processamento intensivo de dados.
Organização dos capítulos
O livro está dividido em 2 partes. A primeira parte mostra como criar motores de busca com o Lucene, e a segunda mostra técnicas avançadas da área, incluindo o uso de outras ferramentas, como o Hibernate Search e o Apache Nutch. No total são 10 capítulos, cada um tratando de um assunto específico, sendo que no final de cada um temos uma lista de referências para completar os estudos.
O primeiro capítulo, Introdução, mostra o que cada ferramenta é capaz de fazer, bem como suas características. No final deste capítulo estão listados os repositórios de código-fonte do livro, disponíveis no GitHub.
O capítulo 2. Conceitos de recuperação da informação fala da teoria aplicada aos sistemas de busca. Inclui ideias básicas como índice, documento, coleção de documentos e metadados. Mas também explicamos tópicos mais avançadas como o índice invertido, TF-IDF, processamento de linguagem natural e text mining. Nesse caso, não estamos falando especificamente de uma tecnologia ou biblioteca, mas sim da teoria envolvida no tema.
O capítulo 3. Indexação e busca mostra exemplos de como indexar e buscar informações nos dados do seu computador ou da sua empresa. É um exemplo simples, onde vamos ver as principais classes e funcionalidades necessárias para criar nosso primeiro motor de busca.
O capítulo 4. Tipos de busca fala sobre as opções disponíveis no Lucene, não apenas por palavra-chave, mas também busca por intervalo de valores, conectivos e busca por valor aproximado. Nesse ponto é possível imaginar como substituir algumas funcionalidades existentes nos seus sistemas pelo Lucene.
Estudaremos o núcleo do Lucene em 5. Principais classes do Lucene. No capítulo 6. Configurações avançadas vemos algumas otimizações que podem ser feitas para indexação e busca. É onde serão vistos os principais parâmetros e configurações que alteram o comportamento e performance do Lucene.
No capítulo 7. Integração com sistemas corporativos temos um modelo de integração entre uma aplicação Java e o Lucene. Para sistemas que usam JPA e Hibernate, há o capítulo 8 sobre o Hibernate Search ORM. Foram criadas duas aplicações para mostrar essas possibilidades. Não há uma única forma correta de se integrar essas ferramentas, então são mostradas algumas possibilidades com Lucene e com Hibernate Search.
O capítulo 9. Recursos avançados apresenta técnicas como highlight, criação de sinônimos, sugestão de termos, classificação de documentos, otimizações, análise linguística, text mining e testes de performance. São complementos que estão além da busca por palavra-chave.
No capítulo 10. Extraindo dados da internet veremos técnicas e ferramentas para web crawling e web scraping. Assim, criamos um robô para navegar na internet e extrair o conteúdo das páginas visitadas. Depois de baixar esse conteúdo, procedemos com a indexação, tornando esses textos disponíveis para consulta local na nossa aplicação.
Por fim, o capítulo 11. Referências do livro mostra todos os recursos usados nos capítulos anteriores.
Sumário
- 1 Introdução
- 1.1 Linguagem natural
- 1.2 Sistemas de busca
- 1.3 Apache Lucene
- 1.4 Muito mais do que apenas buscas
- 1.5 O que um motor de busca não faz
- 1.6 Ecossistema do Lucene
- 1.7 Aplicações de exemplo e código-fonte
- 2 Conceitos de recuperação da informação
- 2.1 Recuperação da Informação
- 2.2 Índice
- 2.3 Documento
- 2.4 Campo
- 2.5 Termo
- 2.6 Fases de processamento
- 2.7 Dados estruturados
- 2.8 Dados semiestruturados
- 2.9 Dados não estruturados
- 2.10 Índice invertido
- 3 Indexação e busca
- 3.1 O que vamos precisar
- 3.2 Primeira fase: indexação
- 3.3 Segunda fase: a busca
- 3.4 Removendo documentos do índice
- 3.5 Atualizando documento no índice
- 4 Tipos de busca
- 4.1 Comparação com uma consulta SQL
- 4.2 Sintaxe clássica de buscas
- 4.3 Buscas com a sintaxe clássica
- 4.4 Operadores lógicos
- 4.5 Busca com elevação (boost)
- 4.6 Expressão regular
- 4.7 API do Lucene
- 5 Principais classes do Lucene
- 5.1 Document
- 5.2 Field
- 5.3 IndexWriter
- 5.4 Directory
- 5.5 IndexReader
- 6 Configurações avançadas
- 6.1 Configurações da indexação
- 6.2 Performance da configuração padrão
- 6.3 Tipos de arquivo
- 6.4 Controlando a segmentação do índice
- 6.5 Analyzer
- 7 Integração com sistemas corporativos
- 7.1 Modelo de dados
- 7.2 Um buscador para sistemas web
- 7.3 Índice Produto
- 7.4 Carga inicial dos dados
- 7.5 O managed bean BuscaLivreProdutoBean
- 7.6 Paginação com Lucene
- 7.7 Atualizando o índice com temporizador
- 7.8 Índice Venda
- 8 Hibernate Search ORM
- 8.1 Configuração do projeto
- 8.2 Indexando dados relacionais com Hibernate Search
- 8.3 Consultando com Hibernate Search
- 8.4 Indexando campos numéricos
- 8.5 Indexando associações entre classes
- 8.6 Indexando campos binários
- 9 Recursos avançados
- 9.1 Sinônimos
- 9.2 Frequência dos termos
- 9.3 Indexando campos com vetores
- 9.4 Corretor ortográfico (spell checker)
- 9.5 Sugestão de resultados (suggester)
- 9.6 Consulta "More Like This" (MLT)
- 9.7 Marcando texto com Highlighter
- 9.8 Faceted search/navigation
- 10 Extraindo dados da internet
- 10.1 Web crawling
- 10.2 Web scraping
- 10.3 Considerações sobre performance
- 10.4 Considerações legais e éticas
- 11 Referências bibliográficas
Dados do produto
- Número de páginas:
- 382
- ISBN:
- 978-85-7254-027-8
- Data publicação:
- 09/2019