Introdução ao Spring Data Solr

Introdução ao Spring Data Solr

1. Visão geral

Neste artigo,we’ll explore the basics of Spring Data Solr de maneira prática.

O Apache Solr é um código aberto pronto para implantar o mecanismo de pesquisa de texto completo da empresa. Você pode encontrar mais sobre os recursos do Solr emofficial website.

Mostraremos como fazer uma configuração Solr simples e, claro, como interagir com o servidor.

Primeiro, precisamos iniciar um servidor Solr e criar um núcleo para armazenar dados (que, por padrão, o Solr criará no modo sem esquema).

2. Dados da Primavera

Assim como qualquer outro projeto Spring Data, Spring Data Solr tem um objetivo claro de remover códigos clichê, dos quais vamos certamente tirar proveito.

2.1. Dependência do Maven

Vamos começar adicionando a dependência Spring Data Solr ao nossopom.xml:


    org.springframework.data
    spring-data-solr
    2.0.5.RELEASE

Você pode encontrar as dependências mais recenteshere.

2.2. Definindo o Documento

Vamos definir um documento chamadoProduct:

@SolrDocument(solrCoreName = "product")
public class Product {

    @Id
    @Indexed(name = "id", type = "string")
    private String id;

    @Indexed(name = "name", type = "string")
    private String name;

}

A anotação@SolrDocument indica que a classeProduct é um documento Solr e indexado ao núcleo denominadoproduct. Os campos anotados com@Indexed são indexados no Solr e podem ser pesquisados.

2.3. Definindo a Interface do Repositório

Em seguida, precisamos criar uma interface de repositório estendendo um repositório fornecido pelo Spring Data Solr. Vamos parametrizar isso naturalmente comProducteString como nosso id de entidade:

public interface ProductRepository extends SolrCrudRepository {

    public List findByName(String name);

    @Query("id:*?0* OR name:*?0*")
    public Page findByCustomQuery(String searchTerm, Pageable pageable);

    @Query(name = "Product.findByNamedQuery")
    public Page findByNamedQuery(String searchTerm, Pageable pageable);

}

Observe como estamos definindo três métodos aqui, além da API fornecida porSolrCrudRepository. Falaremos sobre isso nas próximas seções.

Observe também que a propriedadeProduct.findByNamedQuery é definida no Solr chamado arquivo de consultasolr-named-queries.properties na pasta classpath:

Product.findByNamedQuery=id:*?0* OR name:*?0*

2.4. Configuração Java

Agora vamos explorar a configuração Spring da camada de persistência do Solr:

@Configuration
@EnableSolrRepositories(
  basePackages = "com.example.spring.data.solr.repository",
  namedQueriesLocation = "classpath:solr-named-queries.properties",
  multicoreSupport = true)
@ComponentScan
public class SolrConfig {

    @Bean
    public SolrClient solrClient() {
        return new HttpSolrClient("http://localhost:8983/solr");
    }

    @Bean
    public SolrTemplate solrTemplate(SolrClient client) throws Exception {
        return new SolrTemplate(client);
    }
}

Estamos usando@EnableSolrRepositories para escanear os pacotes em busca de repositórios. Observe que especificamos o local do arquivo de propriedades da consulta nomeada e ativamos o suporte multinúcleo.

Se o multi-core não estiver ativado, o Spring Data assumirá, por padrão, que a configuração do Solr é para um único núcleo. Estamos habilitando multi-core aqui, apenas para referência.

3. Indexação, atualização e exclusão

Para pesquisar documentos no Solr, os documentos devem ser indexados no repositório do Solr.

O exemplo a seguir indexa um documento de produto no repositório Solr simplesmente usando o método de salvamentoSolrCrudRepository’s:

Product phone = new Product();
phone.setId("P0001");
phone.setName("Phone");
productRepository.save(phone);

Agora vamos recuperar e atualizar um documento:

Product retrievedProduct = productRepository.findOne("P0001");
retrievedProduct.setName("Smart Phone");
productRepository.save(retrievedProduct);

Os documentos podem ser excluídos simplesmente chamando o método de exclusão:

productRepository.delete(retrievedProduct);

4. Consulta

Vamos agora explorar as diferentes técnicas de consulta fornecidas pela API Spring Data Solr.

4.1. Geração de consulta de nome de método

As consultas baseadas no nome do método são geradas analisando o nome do método para gerar a consulta esperada a ser executada:

public List findByName(String name);

Em nossa interface de repositório, temos o métodofindByName que gera a consulta com base no nome do método:

List retrievedProducts = productRepository.findByName("Phone");

4.2. Consulta com anotação@Query

As consultas de pesquisa Solr podem ser criadas tendo a consulta em uma anotação@Query de um método. Em nosso exemplofindByCustomQuery é anotado com a anotação@Query:

@Query("id:*?0* OR name:*?0*")
public Page findByCustomQuery(String searchTerm, Pageable pageable);

Vamos usar este método para recuperar documentos:

Page result
  = productRepository.findByCustomQuery("Phone", new PageRequest(0, 10));

Ao chamarfindByCustomQuery(“Phone”, new PageRequest(0, 10)), obtemos a primeira página dos documentos do produto que contém a palavra “Telefone” em qualquer um de seus camposid ouname.

4.3. Consulta nomeada

As consultas nomeadas são semelhantes às consultas com a anotação@Query, exceto as consultas são declaradas em um arquivo de propriedades separado:

@Query(name = "Product.findByNamedQuery")
public Page findByNamedQuery(String searchTerm, Pageable pageable);

Observe que a anotação@Query não é necessária se a chave (findByNamedQuery) da consulta no arquivo de propriedades corresponder ao nome do método.

Vamos recuperar alguns documentos usando o método de consulta nomeado:

Page result
  = productRepository.findByNamedQuery("one", new PageRequest(0, 10));

5. Conclusão

Este artigo é uma introdução rápida e prática ao Spring Data Solr, cobrindo a configuração básica, definindo repositórios e consultas naturais.

E como sempre, os exemplos usados ​​aqui estão disponíveis comosample project on Github.