Préparation de configuration
Ajoutez les dépendances suivantes dans le fichier build.gradle:
compiler "org.ellasticsearch.client: Transport: 5.5.2" compiler "org.ellasticsearch: elasticsearch: 5.5.2" // es 5.x Utiliser le journal APACHE LOG4 Compile "org.apache.logging.log4j: log4j-core: 2.7" compile "" org.apache.logging.log4j: log4j-a ".
Ici, Spring Boot utilise la version 1.5.4. La version officielle de Spring Boot 2 a été publiée il y a quelques jours. L'une des nouvelles fonctionnalités de Spring Boot 2 est de prendre en charge Kotlin. Spring Boot 2 est basé sur le printemps 5. Le printemps 5 prend également en charge Koltin, donc le printemps a également commencé à prendre en charge la programmation fonctionnelle.
À propos de la compatibilité des versions
Configurez le client qui accède à Elasticsearch et utilise tous ici le natif 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 (inconnuhostException e) {e.printStackTrace (); } Settings Settings = Settings.Builder (). Put ("Cluster.name", "My-es"). Build (); TransportClient Client = new PrebuiltTransportClient (paramètres); client.addtransportAddress (nœud); RETOUR Client; }}Le port SocketTransport peut être affiché à l'aide de http: // ip: 9200 / _nodes, et la valeur par défaut est d'utiliser le port 9300.
Opération CRUD
Créez un nouveau contrôleur, ElasticSearchController, en utilisant le natif ES Javaapi.
@RestControllerPublic Class ElasticsearchController {@Autowired TransportClient Client;}Ajout de méthodes pour ajouter, supprimer, rechercher et modifier dans le contrôleur
Ajouter des opérations
@Postmapping ("add / book / roman") Réponse publique Add (@RequestParam (name = "title") Title de la chaîne, @RequestParam (name = "Authro") Auteur de chaîne, @RequestParam (name = "word_count") int wordCount, @RequestParam (name = "publish_date") @datetimeformat (patron HH: MM: SS ") Date PublishDate) {try {XContentBuilder Content = XContentFactory.jsonBuilder (). StartObject () .Field (" Title ", Title) .Field (" Author ", Author) .Field (" Word_Count ", WordCount) .field (" Publish_Date ", PublishDate.gettime (). IndexResponse result = this.client.prepareIndex ("book", "roman"). SetSource (contenu) .get (); return new ResponseNtity (result.getId (), httpstatus.ok); } catch (ioException e) {e.printStackTrace (); return new ResponseNtity (httpstatus.internal_server_error); }}Supprimer
@Deletemapping ("/ delete / book / roman") Public Responsentity Delete (@RequestParam (name = "id") String id) {deleterSponse result = client.PrepareDelete ("book", "roman", id) .get (); return new ResponseNtity (result.getResult (). toString (), httpstatus.ok); }Opérations de recherche
@GetMapping ("/ get / book / roman") Réponse publique Get (@RequestParam (name = "id", defaultValue = "") String id) {if (id.isempty ()) {return new ResponseNtity (httpstatus.not_found); } GetResponse result = this.client.prepareget ("book", "roman", id) .get (); if (! result.isexists ()) {return new réponseNity (httpstatus.not_found); } return new ResponseNtity (result.getsource (), httpstatus.ok); }Mise à jour de l'opération
@Putmapping ("/ put / book / roman") Mise à jour de la réponse publique (@RequestParam (name = "id") ID de chaîne, @RequestParam (name = "title", requise = false) Titre de chaîne, @RequestParam (name = "auteur", obligatoire = false) Author de chaîne) {try {xcontentBuilder Builder = XContentFactory.jsonBuilder (). if (title! = null) {builder.field ("title", titre); } if (auteur! = null) {builder.field ("auteur", auteur); } builder.endObject (); UpdateRequest UpdateRequest = new UpdateRequest ("Book", "Novel", ID); UpdateRequest.doc (constructeur); UpdateResponse result = client.update (UpdateRequest) .get (); return new ResponseNtity (result.getResult (). toString (), httpstatus.ok); } catch (exception e) {e.printStackTrace (); return new ResponseNtity (httpstatus.internal_server_error); }}Recherche composée
@GetMapping ("/ Query / Book / Novel") Public Responseentity Query (@RequestParam (name = "Author", requise = false) String Auteur, @RequestParam (name = "Title", Obligation = False) Title de chaîne, @RequestParam (name = "GT_WORD_COUNT", defaultvalue = "0") int gtwent, @requestParam (name = "LT_WORD_COW false) entier ltwordCount) {boolQueryBuilder boolQueryBuilder = queryBuilders.boolQuery (); if (auteur! = null) {boolQueryBuilder.must (queryBuilders.matchQuery ("auteur", auteur)); } if (title! = null) {boolquerybuilder.must (querybuilders.matchQuery ("title", title)); } RangeQueryBuilder RangeQueryBuilder = queryBuilders.RangeQuery ("Word_Count"). De (gtwordCount); if (ltwordCount! = null && ltwordCount> 0) {rangeQueryBuilder.to (ltwordCount); } boolQueryBuilder.Filter (RangeQueryBuilder); SearchRequestBuilder searchRequestBuilder = this.client.prepareSearch ("book") .setTypes ("roman") .setsearchType (searchType.dfs_query_then_fetch) .setQuery (boolQueryBuilder) .SetFrom (0) .setsize (10); System.out.println (SearchRequestBuilder); // Debug SearchResponse Response = searchRequestBuilder.get (); List <map <string, objet >> result = new ArrayList <> (); for (searchhit hit: réponse.geThits ()) {result.add (hit.getSource ()); } return new ResponseNtity (résultat, httpstatus.ok); }Le code ci-dessus organise des requêtes composées similaires à la requête suivante DSL:
{"Query": {"bool": {"must": [{"match": {"auteur": "zhang san"}}, {"match": {"title": "elasticsearch"}}], "filter": [{"range": {"word_count": {"gt": "0" }}Résumer
Ce qui précède est ce que l'éditeur a introduit à Springboot intègre Elasticsearch et implémente les opérations CUD. J'espère que ce sera utile à tout le monde. Si vous avez des questions, veuillez me laisser un message et l'éditeur répondra à tout le monde à temps. Merci beaucoup pour votre soutien au site Web Wulin.com!