Por que eu devo ler este artigo:A incorporação de funcionalidades relacionadas à busca textual em aplicações vem sendo um requisito cada vez mais comum. Neste cenário, uma das opções disponíveis e que fornece um leque bastante amplo de funções é o Solr.

Aproveitando a bem-sucedida abstração de acesso a repositórios de dados persistentes, Spring Data, uma implementação desta, nomeada Spring Data Solr, foi introduzida com o objetivo de facilitar o acesso a dados armazenados em servidores Solr.

Assim, pensando em favorecer o entendimento desta tecnologia, serão apresentados neste artigo os seus principais recursos e depois, com uma fundamentação sólida de conceitos e convenções, será desenvolvido um exemplo para demonstrar o uso do Spring Data Solr já integrado ao Spring Boot, que permite uma ágil construção de projetos e sem grandes custos de setup, comuns a projetos Spring.

O Spring Framework é uma plataforma que provê uma série de abstrações que auxiliam o desenvolvedor na construção de aplicações Java. O intuito é deixar o desenvolvedor focado nas regras de negócio da aplicação, enquanto toda a infraestrutura básica é fornecida pelo Spring.

Por exemplo: transações passam a ser criadas e aplicadas por métodos anotados com @Transactional; operações gerenciadas podem ser criadas sem ter que lidar com a API da JMX; etc.

O Spring, em virtude do tamanho, tem sua estrutura separada em módulos e tais módulos devem ser adicionados ao projeto em desenvolvimento de acordo com a necessidade.

Cada módulo (sendo Spring ou não) requerido pela aplicação é considerado uma dependência e estas podem ser administradas por um gerenciador de dependências, como é o caso do Maven.

Além do gerenciamento de dependências (e a incorporação das mesmas ao projeto), é necessária, a aplicações web, a configuração em um padrão que seja entendido pelo servidor de aplicação (por exemplo, a configuração de Servlets ou filtros).

Este trabalho pode ser mitigado com a utilização do Spring Boot, que parte do princípio de que toda aplicação tem uma configuração padrão, e que pode ser modificada se necessário. Assim, com o Spring Boot, evita-se que 99% das aplicações Spring precisem ser configuradas do zero.

A estrutura proposta pelo Spring Framework promove a utilização de abstrações para fornecer uma interface padrão. Esta característica permite que o desenvolvedor comece com alguns testes preliminares sem que se aprofunde na tecnologia em questão.

O módulo/projeto Spring Data é um exemplo. Alguns padrões e interfaces são estipulados em um projeto comum e diferentes implementações utilizam esta base comum para acesso a repositórios específicos.

Assim, tem-se implementações do Spring Data para acesso a bancos de dados relacionais por meio da JPA, ElasticSearch, Neo4J, MongoDB, Solr, entre outros, todos utilizando a mesma metodologia. Portanto, ter conhecimento de como funciona o Spring Data pela utilização de uma das implementações fornece uma base para que outras sejam utilizadas pelo desenvolvedor.

O Spring Data facilita o desenvolvimento de aplicações com acesso a repositórios de dados pela disponibilização de um conjunto de operações e interfaces padrão.

Estas compreendem desde operações simples como criação, carga, modificação e exclusão de registros, bem como operações mais complexas, que envolvem paginação e ordenação de registros. Outra funcionalidade marcante do Spring Data é a capacidade de interpretação de nomes de métodos para gerar ações (geralmente queries). Por exemplo: ao escrever uma interface de acesso a dados contendo o seguinte método: Page<Product> findByCategory(String category, Pageable pageable), quando invocada, a query resultante da interpretação do nome deste método é executada junto ao repositório de dados considerando questões de paginação providas como parâmetro.

Este método em específico selecionará os produtos utilizando como cláusula de busca o campo category, que deve coincidir com o valor informado no primeiro parâmetro.

Para demonstrar as vantagens na utilização do Spring Data Solr, revisaremos alguns conceitos iniciais desta tecnologia. Em um segundo momento, a biblioteca nativa de acesso ao servidor Solr para Java (SolrJ) é apresentada. E para finalizar, um protótipo aplicando os conceitos apresentados é desenvolvido.

Solr, Lucene e Spring Data Solr

O Lucene é uma biblioteca que fornece ao desenvolvedor suporte a operações de busca textual. Como funcionalidade principal, viabiliza operações de busca em texto considerando similaridade, ordem das palavras, relevância e outros fatores.

Já o Solr é uma aplicação construída utilizando o Lucene para prover ainda mais funcionalidades, como agrupamentos, informações estatísticas sobre campos, enfatização de termos de busca, clustering e outras mais.

De forma comparativa, pode-se dizer que documentos em Solr são análogos a registros em um banco de dados relacionais. Estes documentos, por sua vez, são armazenados em um núcleo (core), que pode ser visto como uma tabela.

Além disso, cada núcleo possui um esquema (schema), que é um modelo para regulamentar a estrutura dos documentos que ali serão armazenados.

No entanto, não se encontra aqui (Solr) integridade referencial, isolamento, consistência ou outras características comuns a um banco de dados relacional.

Por outro lado, temos suporte a operações de busca textual e a possibilidade de efetuar escalabilidade horizontal, onde a robustez de um serviço é aumentada com a adição de mais nós (máquinas) ao cluster.

O acesso às funcionalidades oferecidas pelo Solr pode ser feito utilizando uma interface REST, bastando desta forma uma requisição HTTP ao servidor. Como resposta, vários formatos podem ser providos, sendo XML o formato padrão.

Outros formatos incluem, mas não se limitam a: JSON, Javabin, PHP, Ruby, Python e CSV. Quando utilizado a partir de uma aplicação Java, o formato Javabin pode ser o escolhido, sendo assim possível a desserialização do resultado diretamente para objetos Java, em vez de efetuar toda a interpretação do documento XML para então fornecer um grafo de objetos.

De modo a facilitar a integração com o Java, uma biblioteca nomeada SolrJ é disponibilizada. Com isso, a execução de funcionalidades em um servidor Solr se torna transparente para programadores Java.

Assim como o SolrJ, o Spring Data Solr é uma interface de acesso a um servidor Solr. A diferença básica é a adoção de padrões e conceitos definidos pelo Spring Data e a pronta integração com aplicações Spring. Esta abordagem traz duas vantagens para o desenvolvedor:

1. Convenções e automatismos facilitam o desenvolvimento de métodos de acesso a dados. Para isso, métodos definidos em uma interface, por exemplo, têm o seu nome analisado junto a uma série de convenções de nomes para definir de forma dinâmica a query a ser executada.

O automatismo é verificado quando uma interface de acesso a dados precisa ser instanciada. Neste ponto, um proxy é criado. E quando um método deste proxy é invocado, convenções e anotações são utilizadas, definindo assim ações que serão executadas junto ao servidor Solr;

2. Pouco conhecimento de bibliotecas para uso de repositório de dados é necessário para que o desenvolvedor possa fazer uso do mesmo. Também se enquadram aqui os conceitos introduzidos pelo Spring Data, que são compartilhados por todos os projetos (Spring Data JPA, Spring Data Solr, Spring Data MongoDB e outros). Assim, fica mais fácil a adoção de outros módulos Spring Data.

Solr

Independentemente da biblioteca utilizada para acessar um servidor Solr, é importante ter conhecimento das funcionalidades que esta ferramenta pode oferecer. Assim sendo, uma listagem com as funcionalidades básicas, seguidas de sua descrição e tipo de retorno, é apresentada a seguir:

· Faceting – podemos comparar esta funcionalidade, de forma simplista, com o select-count-where-group-by de um banco de dados relacional. O resultado conterá a listagem de documentos encontrados pela query e uma sumarização para cada campo pelo qual os documentos selecionados devem ser agrupados.

Desta forma é possível, com uma única requisição ao servidor Solr, por exemplo, selecionar documentos utilizando alguns critérios (que seria a query em si) e agrupar tais documentos por uma li ...

Quer ler esse conteúdo completo? Tenha acesso completo