Introduktion til Spring Data Solr

1. Oversigt

I denne artikel vi udforsker det grundlæggende i Spring Data Solr på en praktisk måde.

Apache Solr er en open source klar til at implementere virksomhedens fuldtekst-søgemaskine. Du kan finde mere om funktionerne i Solr på den officielle hjemmeside.

Vi viser, hvordan man laver en simpel Solr-konfiguration, og selvfølgelig hvordan man interagerer med serveren.

Først skal vi starte en Solr-server og oprette en kerne til at gemme data (som Solr som standard opretter i skemaløs tilstand).

2. Forårsdata

Ligesom ethvert andet Spring Data-projekt har Spring Data Solr et klart mål om at fjerne kedelpladekoder, som vi helt sikkert vil udnytte.

2.1. Maven afhængighed

Lad os starte med at tilføje Spring Data Solr afhængighed til vores pom.xml:

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

Du kan finde de seneste afhængigheder her.

2.2. Definition af dokumentet

Lad os definere et kaldet dokument Produkt:

@SolrDocument (solrCoreName = "produkt") offentlig klasse Produkt {@Id @Indexed (navn = "id", type = "streng") privat streng-id; @Indexed (navn = "navn", type = "streng") privat strengnavn; }

@SolrDocument anmærkning angiver, at Produkt klasse er et Solr-dokument og indekseret til kernenavnet produkt. Felter kommenteret med @Indekseret er indekseret i Solr og kan søges.

2.3. Definition af lagergrænseflade

Derefter skal vi oprette en lagergrænseflade ved at udvide et lager, der leveres af Spring Data Solr. Vi parametriserer naturligvis dette med Produkt og Snor som vores enheds-id:

offentlig grænseflade ProductRepository udvider SolrCrudRepository {public List findByName (strengnavn); @Query ("id: *? 0 * ELLER navn: *? 0 *") offentlig side findByCustomQuery (String searchTerm, Pageable pageable); @Query (name = "Product.findByNamedQuery") offentlig side findByNamedQuery (String searchTerm, Pageable pageable); }

Læg mærke til, hvordan vi definerer tre metoder her oven på API'en, der leveres af SolrCrudRepository. Vi vil tale om disse i de næste par sektioner.

Bemærk også, at Product.findByNamedQuery egenskab er defineret i Solr navngivet forespørgselsfil solr-named-queries.properties i klassesti-mappen:

Product.findByNamedQuery = id: *? 0 * ELLER navn: *? 0 *

2.4. Java-konfiguration

Nu vil vi undersøge forårskonfigurationen af ​​Solr-persistenslag:

@Configuration @EnableSolrRepositories (basePackages = "com.baeldung.spring.data.solr.repository", namedQueriesLocation = "classpath: solr-named-queries.properties", multicoreSupport = true) @ComponentScan offentlig klasse SolrConfig {@BeanClient solClient () {returner ny HttpSolrClient ("// localhost: 8983 / solr"); } @Bean offentlig SolrTemplate solrTemplate (SolrClient-klient) kaster Undtagelse {returner ny SolrTemplate (klient); }}

Vi bruger @EnableSolrRepositories for at scanne pakkerne for opbevaringssteder. Bemærk, at vi har specificeret placeringen af ​​den navngivne forespørgselsegenskabsfil og aktiveret understøttelse af flere kerner.

Hvis multikerne ikke er aktiveret, antager Spring Data som standard, at Solr-konfiguration er for en enkelt kerne. Vi aktiverer multi-core her, kun til reference.

3. Indeksering, opdatering og sletning

For at søge i dokumenter i Solr skal dokumenter indekseres til Solr-arkivet.

Følgende eksempel indekserer et produktdokument i Solr-arkivet ved blot at bruge SolrCrudRepository gemme metode:

Produkttelefon = nyt produkt (); phone.setId ("P0001"); phone.setName ("Telefon"); productRepository.save (telefon);

Lad os nu hente og opdatere et dokument:

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

Dokumenter kan slettes ved blot at ringe til sletningsmetoden:

productRepository.delete (retrievedProduct);

4. Forespørgsel

Lad os nu undersøge forskellige forespørgselsteknikker leveret af Spring Data Solr API.

4.1. Metode Navn Forespørgsel Generering

Metodenavnbaserede forespørgsler genereres ved at analysere metodens navn for at generere den forventede forespørgsel, der skal udføres:

offentlig liste findByName (strengnavn);

I vores arkivgrænseflade har vi det findByName metode, der genererer forespørgsel baseret på metodens navn:

Liste retrievedProducts = productRepository.findByName ("Telefon");

4.2. Forespørgsel med @Forespørgsel Kommentar

Solr-søgeforespørgsler kan oprettes ved at have forespørgslen i en @Forespørgsel annotering af en metode. I vores eksempel findByCustomQuery er kommenteret med @Forespørgsel kommentar:

@Query ("id: *? 0 * ELLER navn: *? 0 *") offentlig side findByCustomQuery (String searchTerm, Pageable pageable);

Lad os bruge denne metode til at hente dokumenter:

Sideresultat = productRepository.findByCustomQuery ("Telefon", ny PageRequest (0, 10));

Ved at ringe til findByCustomQuery (“Telefon”, ny PageRequest (0, 10)) vi får den første side af produktdokumenterne, der indeholder ordet “Telefon” i et af dens felter id eller navn.

4.3. Navngivet forespørgsel

Navngivne forespørgsler svarer til forespørgsler med @Forespørgsel annotation undtagen forespørgsler erklæres i en separat egenskabsfil:

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

Bemærk, at @Forespørgsel kommentar er ikke påkrævet, hvis nøglen (findByNamedQuery) af forespørgslen i egenskabsfilen matcher metodens navn.

Lad os hente nogle dokumenter ved hjælp af den navngivne forespørgselsmetode:

Sideresultat = productRepository.findByNamedQuery ("en", ny PageRequest (0, 10));

5. Konklusion

Denne artikel er en hurtig og praktisk introduktion til Spring Data Solr, der dækker den grundlæggende konfiguration, definerer opbevaringssteder og naturligt spørger.

Og som altid er eksemplerne, der bruges her, tilgængelige som et prøveprojekt på Github.