Einführung in Spring Data Solr

Einführung in Spring Data Solr

1. Überblick

In diesem Artikel wirdwe’ll explore the basics of Spring Data Solrauf praktische Weise angegeben.

Apache Solr ist eine Open Source-fähige Volltextsuchmaschine für Unternehmen. Weitere Informationen zu den Funktionen von Solr finden Sie unterofficial website.

Wir zeigen Ihnen, wie Sie eine einfache Solr-Konfiguration durchführen und natürlich mit dem Server interagieren.

Zunächst müssen wir einen Solr-Server starten und einen Core zum Speichern von Daten erstellen (der von Solr standardmäßig im schemenlosen Modus erstellt wird).

2. Federdaten

Wie bei jedem anderen Spring Data-Projekt hat Spring Data Solr das klare Ziel, Boilerplate-Codes zu entfernen, die wir auf jeden Fall nutzen werden.

2.1. Maven-Abhängigkeit

Beginnen wir mit dem Hinzufügen der Spring Data Solr-Abhängigkeit zu unserenpom.xml:


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

Sie finden die neuesten Abhängigkeitenhere.

2.2. Dokument definieren

Definieren wir ein Dokument mit dem NamenProduct:

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

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

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

}

Die Annotation@SolrDocument gibt an, dass die KlasseProduct ein Solr-Dokument ist und auf den Kern mit dem Namenproduct indiziert ist. Mit@Indexed versehene Felder werden in Solr indiziert und können durchsucht werden.

2.3. Repository-Schnittstelle definieren

Als Nächstes müssen Sie eine Repository-Schnittstelle erstellen, indem Sie ein von Spring Data Solr bereitgestelltes Repository erweitern. Wir werden dies natürlich mitProduct undString als Entitäts-ID parametrisieren:

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);

}

Beachten Sie, wie wir hier drei Methoden definieren, zusätzlich zu der vonSolrCrudRepository bereitgestellten API. Wir werden in den nächsten Abschnitten darüber sprechen.

Beachten Sie auch, dass die EigenschaftProduct.findByNamedQueryin der Solr-Abfragedateisolr-named-queries.properties im Klassenpfadordner definiert ist:

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

2.4. Java-Konfiguration

Jetzt werden wir die Spring-Konfiguration der Solr-Persistenzschicht untersuchen:

@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);
    }
}

Wir verwenden@EnableSolrRepositories, um die Pakete nach Repositorys zu durchsuchen. Beachten Sie, dass wir den Speicherort der benannten Abfrageeigenschaftendatei angegeben und die Unterstützung für mehrere Kerne aktiviert haben.

Wenn Multi-Core nicht aktiviert ist, geht Spring Data standardmäßig davon aus, dass sich die Solr-Konfiguration auf einen einzelnen Core bezieht. Wir aktivieren hier Multi-Core, nur als Referenz.

3. Indizieren, Aktualisieren und Löschen

Zum Durchsuchen von Dokumenten in Solr sollten Dokumente im Solr-Repository indiziert werden.

Das folgende Beispiel indiziert ein Produktdokument im Solr-Repository einfach mithilfe der SpeichermethodeSolrCrudRepository’s:

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

Lassen Sie uns nun ein Dokument abrufen und aktualisieren:

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

Dokumente können einfach durch Aufrufen der Löschmethode gelöscht werden:

productRepository.delete(retrievedProduct);

4. Abfragen

Lassen Sie uns nun verschiedene Abfragetechniken untersuchen, die von der Spring Data Solr-API bereitgestellt werden.

4.1. Generierung von Methodennamenabfragen

Auf Methodennamen basierende Abfragen werden generiert, indem der Methodenname analysiert wird, um die erwartete auszuführende Abfrage zu generieren:

public List findByName(String name);

In unserer Repository-Schnittstelle haben wir die MethodefindByName, die eine Abfrage basierend auf dem Methodennamen generiert:

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

4.2. Abfrage mit@Query Annotation

Solr-Suchabfragen können erstellt werden, indem die Abfrage in einer@Query-Annotation einer Methode angegeben wird. In unserem Beispiel wirdfindByCustomQuery mit@Query Annotation versehen:

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

Verwenden Sie diese Methode, um Dokumente abzurufen:

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

Durch Aufrufen vonfindByCustomQuery(“Phone”, new PageRequest(0, 10)) erhalten wir die erste Seite der Produktdokumente, die das Wort "Telefon" in einem der Felderid odername enthalten.

4.3. Benannte Abfrage

Benannte Abfragen ähneln Abfragen mit@Query Annotation, außer dass die Abfragen in einer separaten Eigenschaftendatei deklariert werden:

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

Beachten Sie, dass die Annotation@Query nicht erforderlich ist, wenn der Schlüssel (findByNamedQuery) der Abfrage in der Eigenschaftendatei mit dem Methodennamen übereinstimmt.

Lassen Sie uns einige Dokumente mit der benannten Abfragemethode abrufen:

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

5. Fazit

Dieser Artikel ist eine schnelle und praktische Einführung in Spring Data Solr und behandelt die Grundkonfiguration, das Definieren von Repositorys und das natürliche Abfragen.

Und wie immer sind die hier verwendeten Beispiele alssample project on Github verfügbar.