Konfigurationsvorbereitung
Fügen Sie die folgenden Abhängigkeiten im Build.gradle -Datei hinzu:
Kompilieren Sie "org.elasticsearch.client: Transport: 5.5.2" compile "org.elasticsearch: elasticsearch: 5.5.2" // es 5.x interne apache log4 log compile "org.apache.logging.log4j: log4j-core: 2.7" compile "org.apache.logging.logging
Hier verwendet Spring Boot Version 1.5.4. Die offizielle Version von Spring Boot 2 wurde vor einigen Tagen veröffentlicht. Eine der neuen Funktionen von Spring Boot 2 ist die Unterstützung von Kotlin. Spring Boot 2 basiert auf der Spring 5. Spring 5 unterstützt auch Koltin, sodass die Spring auch die funktionale Programmierung unterstützt.
Über Versionskompatibilität
Konfigurieren Sie den Client, der auf Elasticsearch zugreift, und alle verwenden hier die nativen ES Javaapi.
@ConfigurationPublic Class ElasticSearchConfig {@Bean (name = "client") public transportclient getClient () {inetSocketTransportAddress node = null; try {node = new inetsockettransportAddress (inetaddress.getByName ("192.168.124.128"), 9300); } catch (unbekannteHostException e) {e.printstacktrace (); } Einstellungen Einstellungen = Einstellungen.Builder (). Put ("cluster.name", "my-es"). Build (); Transportclient client = new PrebuiltTransportClient (Einstellungen); Client.AddtransportAddress (Knoten); Kunden zurückgeben; }}Der SocketTransport -Port kann mit http: // ip: 9200/_nodes angezeigt werden, und die Standardeinstellung besteht darin, Port 9300 zu verwenden.
CRUD -Betrieb
Erstellen Sie einen neuen Controller, ElasticSearchController mit den nativen ES Javaapi.
@RestControllerPublic Class ElasticsearchController {@autowired TransportClient Client;}Hinzufügen von Methoden zum Hinzufügen, Löschen, Suchen und Ändern des Controllers
Operationen hinzufügen
@PostMapping("add/book/novel") public ResponseEntity add( @RequestParam(name = "title") String title, @RequestParam(name = "authro") String author, @RequestParam(name = "word_count") int wordCount, @RequestParam(name = "publish_date") @DateTimeFormat(pattern = "yyyy-MM-dd HH: mm: ss ") Datum veröffentlichen, {try {xcontentBuilder content = xcontentFactory.jsonBuilder (). IndexResponse -Ergebnis = this.client.prepareIndex ("Buch", "Roman"). SetSource (Inhalt) .get (); Neue Antwort zurückgeben (result.getId (), httpstatus.ok); } catch (ioException e) {e.printstacktrace (); Neue Antwort zurückgeben (httpstatus.internal_server_error); }}Betrieb löschen
@DeletMapping ("//delete/book/nomove") public responseentity delete (@RequestParam (name = "id") String -ID) {Deleteresponse -Ergebnis = client.prepeTeRetee ("Buch", "Roman", id) .get (); Neue Responseentity zurückgeben (result.getResult (). toString (), httpstatus.ok); }Suchvorgänge
@Getmapping ("/get/book/nomove") public responseentity get (@RequestParam (name = "id", defaultValue = "") String -ID) {id.isempty ()) {return new antwortentity (httpstatus.not_found); } GetResponse -result = this.client.prepareet ("Buch", "Roman", id) .get (); if (! result.isexists ()) {neuer Antwort zurückgeben (httpstatus.not_found); } return New Responseentity (result.getSource (), httpstatus.ok); }Aktualisieren Sie den Vorgang
@Putmapping ("/put/book/nomove") public responseentity update (@RequestParam (name = "id") String -ID, @RequestParam (name = "title", fordert = false) String -Titel, @RequestParam (name = "Author", fordert = False) String Author) {try {xcontentbuilder builders = xcontory.jsonbusills (). if (title! = null) {builder.field ("title", title); } if (Autor! = null) {builder.field ("Autor", Autor); } builder.endObject (); UpdateRequest updateRequest = new UpdateRequest ("Buch", "Roman", ID); UpdateRequest.doc (Builder); UpdateResponse result = client.update (updateRequest) .get (); Neue Responseentity zurückgeben (result.getResult (). toString (), httpstatus.ok); } catch (Ausnahme e) {e.printstacktrace (); Neue Antwort zurückgeben (httpstatus.internal_server_error); }}Zusammengesetzte Suche
@GetMapping("/query/book/novel") public ResponseEntity query(@RequestParam(name = "author", required = false) String author, @RequestParam(name = "title", required = false) String title, @RequestParam(name = "gt_word_count", defaultValue = "0") int gtWordCount, @RequestParam(name = "lt_word_count", Erforderlich = Falsch) Integer ltwordCount) {boolqueryBuilder boolqueryBuilder = queryBuilders.boolQuery (); if (Autor! } if (title! } RangeQueryBuilder RangeQueryBuilder = querybuilders.RangeQuery ("Word_Count"). Von (gtwordCount); if (ltwordCount! } boolQueryBuilder.filter (RangeQueryBuilder); SearchRequestBuilder SearchRequestBuilder = this.client.prepareSearch ("book") .setTypes ("Roman") .setsearchType (SearchType.dfs_query_then_fetch) .setQuery (boolqueryBuilder) .setfrom (0) .Setsizing (10); System.out.println (SearchRequestBuilder); // Debugug SearchResponse Antwort = SearchRequestBuilder.get (); Liste <map <String, Objekt >> result = new ArrayList <> (); für (SearchHit hit: response.gethits ()) {result.add (hit.getSource ()); } Neue Antwort zurückgeben (Ergebnis, httpstatus.ok); }Der obige Code organisiert zusammengesetzte Abfragen wie die folgende Abfrage DSL:
{ "query":{ "bool":{ "must":[ {"match":{"author":"Zhang San"}}, {"match":{"title":"Elasticsearch"}} ], "filter":[ {"range": {"word_count":{ "gt":"0", "lt":"3000" } } } ] } }}Zusammenfassen
Das obige ist das, was der Editor in Springboot eingeführt hat, integriert Elasticsearch und implementiert CRUD -Operationen. Ich hoffe, es wird für alle hilfreich sein. Wenn Sie Fragen haben, hinterlassen Sie mir bitte eine Nachricht und der Editor wird allen rechtzeitig antworten. Vielen Dank für Ihre Unterstützung auf der Wulin.com -Website!