Inleiding tot Spring Data Solr

1. Overzicht

In dit artikel, we zullen de basisprincipes van Spring Data Solr verkennen op een praktische manier.

Apache Solr is een open source die klaar is om een ​​full-text zoekmachine voor ondernemingen in te zetten. Op de officiële website vind je meer over de features van Solr.

We laten zien hoe u een eenvoudige Solr-configuratie uitvoert en natuurlijk hoe u met de server communiceert.

Eerst moeten we een Solr-server starten en een kern maken om gegevens op te slaan (die Solr standaard in schemaloze modus zal aanmaken).

2. Veergegevens

Net als elk ander Spring Data-project heeft Spring Data Solr een duidelijk doel om standaardcodes te verwijderen, waarvan we zeker zullen profiteren.

2.1. Afhankelijkheid van Maven

Laten we beginnen met het toevoegen van de Spring Data Solr-afhankelijkheid aan onze pom.xml:

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

U kunt de laatste afhankelijkheden hier vinden.

2.2. Het document definiëren

Laten we een document definiëren met de naam Product:

@SolrDocument (solrCoreName = "product") openbare klasse Product {@Id @Indexed (naam = "id", type = "string") privé String-id; @Indexed (name = "name", type = "string") private String naam; }

@SolrDocument annotatie geeft aan dat de Product class is een Solr-document en geïndexeerd naar kern met de naam Product. Velden die zijn geannoteerd met @Indexed worden geïndexeerd in Solr en zijn doorzoekbaar.

2.3. Repository-interface definiëren

Vervolgens moeten we een repository-interface maken door een repository van Spring Data Solr uit te breiden. We zullen dit natuurlijk parametriseren met Product en Draad als onze entiteits-ID:

openbare interface ProductRepository breidt SolrCrudRepository {openbare lijst findByName (tekenreeksnaam) uit; @Query ("id: *? 0 * OR naam: *? 0 *") openbare pagina findByCustomQuery (String searchTerm, Pageable pageable); @Query (name = "Product.findByNamedQuery") openbare pagina findByNamedQuery (String searchTerm, pageable pageable); }

Merk op hoe we hier drie methoden definiëren, bovenop de API die wordt geboden door SolrCrudRepository. We zullen hierover in de volgende secties praten.

Merk ook op dat de Product.findByNamedQuery eigenschap is gedefinieerd in Solr met de naam query-bestand solr-named-queries.properties in de classpath-map:

Product.findByNamedQuery = id: *? 0 * OF naam: *? 0 *

2.4. Java-configuratie

Nu zullen we de Spring-configuratie van de Solr-persistentielaag verkennen:

@Configuration @EnableSolrRepositories (basePackages = "com.baeldung.spring.data.solr.repository", namedQueriesLocation = "classpath: solr-named-queries.properties", multicoreSupport = true) @ComponentScan public class SolrConfig {@Bean solrConfig public SolrConfig () {retourneer nieuwe HttpSolrClient ("// localhost: 8983 / solr"); } @Bean public SolrTemplate solrTemplate (SolrClient-client) genereert uitzondering {retourneer nieuwe SolrTemplate (client); }}

Wij gebruiken @EnableSolrRepositories om de pakketten te scannen op repositories. Merk op dat we de locatie van het benoemde bestand met query-eigenschappen hebben gespecificeerd en multi-core ondersteuning hebben ingeschakeld.

Als multi-core niet is ingeschakeld, neemt Spring Data standaard aan dat de Solr-configuratie voor een enkele kern is. We schakelen hier multi-core in, alleen ter referentie.

3. Indexeren, bijwerken en verwijderen

Om documenten in Solr te kunnen doorzoeken, moeten documenten worden geïndexeerd in de Solr-repository.

In het volgende voorbeeld wordt een productdocument geïndexeerd in de Solr-repository door simpelweg de Van SolrCrudRepository bespaar methode:

Producttelefoon = nieuw product (); phone.setId ("P0001"); phone.setName ("Telefoon"); productRepository.save (telefoon);

Laten we nu een document ophalen en bijwerken:

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

Documenten kunnen worden verwijderd door simpelweg de verwijdermethode aan te roepen:

productRepository.delete (retrievedProduct);

4. Opvragen

Laten we nu verschillende querytechnieken onderzoeken die worden geboden door de Spring Data Solr API.

4.1. Methode Naam Query Generation

Query's op basis van methodenamen worden gegenereerd door de methode naam te parseren om de verwachte uit te voeren query te genereren:

openbare lijst findByName (tekenreeksnaam);

In onze repository-interface hebben we findByName methode die een query genereert op basis van de naam van de methode:

Lijst retrievedProducts = productRepository.findByName ("Telefoon");

4.2. Vraag met @Query Annotatie

Solr-zoekopdrachten kunnen worden gemaakt door de zoekopdracht in een @Query annotatie van een methode. In ons voorbeeld findByCustomQuery is geannoteerd met @Query annotatie:

@Query ("id: *? 0 * OR naam: *? 0 *") openbare pagina findByCustomQuery (String searchTerm, Pageable pageable);

Laten we deze methode gebruiken om documenten op te halen:

Paginaresultaat = productRepository.findByCustomQuery ("Telefoon", nieuwe PageRequest (0, 10));

Door het findByCustomQuery ("Telefoon", nieuwe PageRequest (0, 10)) we krijgen de eerste pagina van de productdocumenten die het woord "Telefoon" in een van de velden bevatten ID kaart of naam.

4.3. Benoemde zoekopdracht

Benoemde zoekopdrachten zijn vergelijkbaar met zoekopdrachten met @Query annotatie behalve dat de queries worden gedeclareerd in een apart eigenschappenbestand:

@Query (name = "Product.findByNamedQuery") openbare pagina findByNamedQuery (String searchTerm, pageable pageable);

Merk op dat de @Query annotatie is niet vereist als de sleutel (findByNamedQuery) van de query in het eigenschappenbestand komt overeen met de naam van de methode.

Laten we enkele documenten ophalen met de benoemde query-methode:

Paginaresultaat = productRepository.findByNamedQuery ("één", nieuwe PageRequest (0, 10));

5. Conclusie

Dit artikel is een snelle en praktische inleiding tot Spring Data Solr en behandelt de basisconfiguratie, het definiëren van repositories en natuurlijk - query's.

En zoals altijd zijn de hier gebruikte voorbeelden beschikbaar als voorbeeldproject op Github.


$config[zx-auto] not found$config[zx-overlay] not found