{"id":540,"date":"2024-12-16T10:18:57","date_gmt":"2024-12-16T09:18:57","guid":{"rendered":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/?p=540"},"modified":"2025-01-03T10:21:30","modified_gmt":"2025-01-03T09:21:30","slug":"solr-und-die-einbindung-in-eine-spring-boot-anwendung","status":"publish","type":"post","link":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/?p=540","title":{"rendered":"Solr und die Einbindung in eine Spring-Boot-Anwendung"},"content":{"rendered":"\n<p>Apache Solr ist eine leistungsstarke Suchplattform, die auf Apache Lucene basiert und f\u00fcr die Indexierung und Abfrage gro\u00dfer Datenmengen optimiert ist. Dank ihrer Skalierbarkeit, Flexibilit\u00e4t und Performance wird Solr h\u00e4ufig in modernen Anwendungen eingesetzt, die effiziente Volltextsuchen, Filter und Analysen ben\u00f6tigen. In diesem Artikel erfahren Sie, wie Sie Solr in eine Spring-Boot-Anwendung integrieren k\u00f6nnen.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h4 class=\"wp-block-heading\">Was ist Solr?<\/h4>\n\n\n\n<p>Solr ist eine Java-basierte Suchplattform, die f\u00fcr die Bearbeitung gro\u00dfer Mengen unstrukturierter Daten ausgelegt ist. Es bietet Funktionen wie:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Volltextsuche<\/strong><\/li>\n\n\n\n<li><strong>Fazettensuche<\/strong><\/li>\n\n\n\n<li><strong>Relevanzbewertung<\/strong><\/li>\n\n\n\n<li><strong>Clustering und Gruppierung<\/strong><\/li>\n\n\n\n<li><strong>Hochverf\u00fcgbarkeit durch Replikation<\/strong><\/li>\n<\/ul>\n\n\n\n<p>Durch REST-APIs ist Solr leicht in verschiedene Anwendungen integrierbar, was es zu einer bevorzugten Wahl f\u00fcr viele Entwickler macht.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h4 class=\"wp-block-heading\">Warum Spring Boot mit Solr kombinieren?<\/h4>\n\n\n\n<p>Spring Boot ist ein Framework, das die Entwicklung von Java-Anwendungen erleichtert. Es bietet umfangreiche Integrationstools und eine intuitive Konfiguration. Die Kombination von Solr und Spring Boot erm\u00f6glicht eine schnelle Entwicklung von Anwendungen mit leistungsstarken Suchfunktionen.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h4 class=\"wp-block-heading\">Vorbereitung<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Solr installieren<\/strong>:\n<ul class=\"wp-block-list\">\n<li>Laden Sie Solr von der <a href=\"https:\/\/solr.apache.org\/\">offiziellen Webseite<\/a> herunter.<\/li>\n\n\n\n<li>Entpacken Sie das Archiv und starten Sie Solr mit dem Befehl: <code>bin\/solr start<\/code><\/li>\n\n\n\n<li>Erstellen Sie einen neuen Core (z. B. &#8222;springboot-solr&#8220;): <br><code>bin\/solr create -c springboot-solr<\/code><br><\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Spring-Boot-Projekt einrichten<\/strong>:\n<ul class=\"wp-block-list\">\n<li>Erstellen Sie ein neues Spring-Boot-Projekt mit Abh\u00e4ngigkeiten f\u00fcr Solr und Spring Data Solr.<\/li>\n\n\n\n<li>Abh\u00e4ngigkeiten (pom.xml): <br><code>&lt;dependency><\/code><br> <code>&lt;groupId>org.springframework.boot&lt;\/groupId><\/code><br> <code>&lt;artifactId>spring-boot-starter-data-solr&lt;\/artifactId><\/code><br><code>&lt;\/dependency><\/code><\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h4 class=\"wp-block-heading\">Solr konfigurieren<\/h4>\n\n\n\n<p>In Ihrer Spring-Boot-Anwendung m\u00fcssen Sie Solr als Datenquelle konfigurieren. Dies erfolgt \u00fcblicherweise \u00fcber die <code>application.properties<\/code> oder <code>application.yml<\/code>:<\/p>\n\n\n\n<p><strong>application.properties:<\/strong><\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">spring.data.solr.host=http:<span class=\"hljs-comment\">\/\/localhost:8983\/solr<\/span>\nspring.data.solr.core=springboot-solr\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p><strong>application.yml:<\/strong><\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">spring:\n  data:\n    solr:\n      host: http:<span class=\"hljs-comment\">\/\/localhost:8983\/solr<\/span>\n      core: springboot-solr\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h4 class=\"wp-block-heading\">Erstellung eines Datenmodells<\/h4>\n\n\n\n<p>Erstellen Sie ein Modell, das die zu indizierenden Daten beschreibt. Solr verwendet Dokumente, die Felder enthalten. In Spring Boot definieren Sie dies mit Annotationen.<\/p>\n\n\n\n<p>Beispiel:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\"><span class=\"hljs-keyword\">import<\/span> org.apache.solr.client.solrj.beans.Field;\n<span class=\"hljs-keyword\">import<\/span> org.springframework.data.annotation.Id;\n<span class=\"hljs-keyword\">import<\/span> org.springframework.data.solr.core.mapping.SolrDocument;\n\n@SolrDocument(collection = <span class=\"hljs-string\">\"springboot-solr\"<\/span>)\npublic <span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">Product<\/span> <\/span>{\n\n    @Id\n    @Field\n    private <span class=\"hljs-built_in\">String<\/span> id;\n\n    @Field\n    private <span class=\"hljs-built_in\">String<\/span> name;\n\n    @Field\n    private <span class=\"hljs-built_in\">String<\/span> description;\n\n    @Field\n    private double price;\n\n    <span class=\"hljs-comment\">\/\/ Getter und Setter<\/span>\n}\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h4 class=\"wp-block-heading\">Repository erstellen<\/h4>\n\n\n\n<p>Spring Data Solr bietet ein Repository-Interface zur einfachen Verwaltung von Solr-Dokumenten. Erstellen Sie ein Interface, das <code>SolrCrudRepository<\/code> erweitert:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-4\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">import<\/span> <span class=\"hljs-selector-tag\">org<\/span><span class=\"hljs-selector-class\">.springframework<\/span><span class=\"hljs-selector-class\">.data<\/span><span class=\"hljs-selector-class\">.solr<\/span><span class=\"hljs-selector-class\">.repository<\/span><span class=\"hljs-selector-class\">.SolrCrudRepository<\/span>;\n<span class=\"hljs-selector-tag\">import<\/span> <span class=\"hljs-selector-tag\">org<\/span><span class=\"hljs-selector-class\">.springframework<\/span><span class=\"hljs-selector-class\">.stereotype<\/span><span class=\"hljs-selector-class\">.Repository<\/span>;\n\n<span class=\"hljs-keyword\">@Repository<\/span>\npublic interface ProductRepository extends SolrCrudRepository&lt;Product, String&gt; {\n\n    <span class=\"hljs-selector-tag\">List<\/span>&lt;<span class=\"hljs-selector-tag\">Product<\/span>&gt; <span class=\"hljs-selector-tag\">findByNameContaining<\/span>(<span class=\"hljs-selector-tag\">String<\/span> <span class=\"hljs-selector-tag\">name<\/span>);\n}\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-4\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h4 class=\"wp-block-heading\">Service-Schicht<\/h4>\n\n\n\n<p>Erstellen Sie eine Service-Klasse, um die Gesch\u00e4ftslogik zu implementieren:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-5\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">import org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.stereotype.Service;\nimport java.util.<span class=\"hljs-keyword\">List<\/span>;\n\n@Service\n<span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">ProductService<\/span> <\/span>{\n\n    @Autowired\n    <span class=\"hljs-keyword\">private<\/span> ProductRepository productRepository;\n\n    <span class=\"hljs-keyword\">public<\/span> void saveProduct(Product product) {\n        productRepository.save(product);\n    }\n\n    <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">List<\/span>&lt;Product&gt; searchProductsByName(String name) {\n        <span class=\"hljs-keyword\">return<\/span> productRepository.findByNameContaining(name);\n    }\n\n    <span class=\"hljs-keyword\">public<\/span> Iterable&lt;Product&gt; getAllProducts() {\n        <span class=\"hljs-keyword\">return<\/span> productRepository.findAll();\n    }\n}\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-5\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h4 class=\"wp-block-heading\">REST-Controller<\/h4>\n\n\n\n<p>Erstellen Sie einen Controller, um API-Endpunkte f\u00fcr Ihre Anwendung bereitzustellen:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-6\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">import<\/span> <span class=\"hljs-selector-tag\">org<\/span><span class=\"hljs-selector-class\">.springframework<\/span><span class=\"hljs-selector-class\">.beans<\/span><span class=\"hljs-selector-class\">.factory<\/span><span class=\"hljs-selector-class\">.annotation<\/span><span class=\"hljs-selector-class\">.Autowired<\/span>;\n<span class=\"hljs-selector-tag\">import<\/span> <span class=\"hljs-selector-tag\">org<\/span><span class=\"hljs-selector-class\">.springframework<\/span><span class=\"hljs-selector-class\">.web<\/span><span class=\"hljs-selector-class\">.bind<\/span><span class=\"hljs-selector-class\">.annotation<\/span>.*;\n<span class=\"hljs-selector-tag\">import<\/span> <span class=\"hljs-selector-tag\">java<\/span><span class=\"hljs-selector-class\">.util<\/span><span class=\"hljs-selector-class\">.List<\/span>;\n\n<span class=\"hljs-keyword\">@RestController<\/span>\n@RequestMapping(<span class=\"hljs-string\">\"\/products\"<\/span>)\npublic class ProductController {\n\n    <span class=\"hljs-keyword\">@Autowired<\/span>\n    private ProductService productService;\n\n    <span class=\"hljs-keyword\">@PostMapping<\/span>\n    public void addProduct(@RequestBody Product product) {\n        <span class=\"hljs-selector-tag\">productService<\/span><span class=\"hljs-selector-class\">.saveProduct<\/span>(<span class=\"hljs-selector-tag\">product<\/span>);\n    }\n\n    <span class=\"hljs-keyword\">@GetMapping<\/span>\n    public Iterable&lt;Product&gt; getAllProducts() {\n        <span class=\"hljs-selector-tag\">return<\/span> <span class=\"hljs-selector-tag\">productService<\/span><span class=\"hljs-selector-class\">.getAllProducts<\/span>();\n    }\n\n    <span class=\"hljs-keyword\">@GetMapping<\/span>(\"\/search\")\n    public List&lt;Product&gt; searchProducts(@RequestParam String name) {\n        <span class=\"hljs-selector-tag\">return<\/span> <span class=\"hljs-selector-tag\">productService<\/span><span class=\"hljs-selector-class\">.searchProductsByName<\/span>(<span class=\"hljs-selector-tag\">name<\/span>);\n    }\n}\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-6\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h4 class=\"wp-block-heading\">Testen der Anwendung<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Starten Sie Solr und Ihre Spring-Boot-Anwendung.<\/li>\n\n\n\n<li>Testen Sie die Endpunkte mit Tools wie Postman oder cURL.\n<ul class=\"wp-block-list\">\n<li>Produkt hinzuf\u00fcgen: <br><code>curl -X POST http:\/\/localhost:8080\/products \\ -H \"Content-Type: application\/json\" \\ -d '{\"id\": \"1\", \"name\": \"Laptop\", \"description\": \"Gaming Laptop\", \"price\": 1500.0}'<\/code><br><\/li>\n\n\n\n<li>Alle Produkte abrufen: <br><code>curl http:\/\/localhost:8080\/products<\/code><br><\/li>\n\n\n\n<li>Nach Produkten suchen: <br><code>curl http:\/\/localhost:8080\/products\/search?name=Laptop<\/code><\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h4 class=\"wp-block-heading\">Fazit<\/h4>\n\n\n\n<p>Die Integration von Solr in eine Spring-Boot-Anwendung bietet eine leistungsstarke L\u00f6sung f\u00fcr Anwendungen, die komplexe Such- und Filteroperationen erfordern. Mit Spring Data Solr wird die Entwicklung durch standardisierte Schnittstellen und einfache Konfiguration erheblich vereinfacht. Dieser Artikel sollte Ihnen als Grundlage dienen, um Ihre eigene Anwendung mit Solr und Spring Boot zu erweitern.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Apache Solr ist eine leistungsstarke Suchplattform, die auf Apache Lucene basiert und f\u00fcr die Indexierung und Abfrage gro\u00dfer Datenmengen optimiert ist. Dank ihrer Skalierbarkeit, Flexibilit\u00e4t und Performance wird Solr h\u00e4ufig in modernen Anwendungen eingesetzt, die effiziente Volltextsuchen, Filter und Analysen ben\u00f6tigen. In diesem Artikel erfahren Sie, wie Sie Solr in eine Spring-Boot-Anwendung integrieren k\u00f6nnen. Was [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5],"tags":[],"class_list":["post-540","post","type-post","status-publish","format-standard","hentry","category-spring"],"_links":{"self":[{"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/posts\/540","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=540"}],"version-history":[{"count":2,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/posts\/540\/revisions"}],"predecessor-version":[{"id":542,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/posts\/540\/revisions\/542"}],"wp:attachment":[{"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=540"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=540"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=540"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}