Persiapan Konfigurasi
Tambahkan dependensi berikut dalam file build.gradle:
Compile "org.elasticsearch.Client: Transport: 5.5.2" Compile "org.elasticsearch: Elasticsearch: 5.5.2" // ES 5.x menggunakan APACHE LOG4 Compile "org.apache.logging.log4j: log4j-core: 2.7" compile "org.apache.logging.logging.
Di sini, Spring Boot menggunakan versi 1.5.4. Versi resmi Spring Boot 2 telah dirilis beberapa hari yang lalu. Salah satu fitur baru Spring Boot 2 adalah mendukung Kotlin. Spring Boot 2 didasarkan pada Spring 5. Spring 5 juga mendukung Koltin, jadi Spring juga mulai mendukung pemrograman fungsional.
Tentang kompatibilitas versi
Konfigurasikan klien yang mengakses Elasticsearch, dan semua menggunakan ES Javaapi asli di sini.
@ConfigurationPublic kelas elasticsearchConfig {@bean (name = "client") public transportClient getClient () {inetsockettransportAddress node = null; coba {node = inetsocketTransportAddress baru (inetaddress.getbyname ("192.168.124.128"), 9300); } catch (unknownHostException e) {e.printstacktrace (); } Pengaturan Pengaturan = Pengaturan.Builder (). Put ("cluster.name", "my-es"). Build (); Klien transportClient = prebuiltTransportClient baru (pengaturan); client.addtransportAddress (node); klien kembali; }}Port SocketTransport dapat dilihat menggunakan http: // ip: 9200/_nodes, dan standarnya adalah menggunakan port 9300.
Operasi CRUD
Buat pengontrol baru, ElasticsearchController, menggunakan ES Javaapi asli.
@RestControllerPublic kelas ElasticsearchController {@Autowired TransportClient Client;}Menambahkan metode untuk menambah, menghapus, mencari, dan memodifikasi di pengontrol
Tambahkan operasi
@PostMapping ("Tambah/Buku/Novel") Tanggapan Publik Tambah (@RequestParam (name = "title") Judul string, @RequestParam (name = "authro") string penulis, @requestparam (name = "word_count") int wordcount, @requestparam (name = "publish_date") @datet "@datet" @requestparam (name = "publish_date") @datet "@datet" @datety (name = "publish") @datet ") Hh: mm: ss ") tanggal publishdate) {coba {xcontentBuilder konten = xcontentfactory.jsonbuilder (). StartObject () .field (" title ", title) .field (" penulis ") .field (" word_count ", wordcount) .field (" publish_date ") .field. IndexResponse result = this.client.prepareIndex ("book", "novel"). SetSource (konten) .get (); mengembalikan responEntity baru (result.getId (), httpstatus.ok); } catch (ioException e) {e.printstacktrace (); Return New ResponseEntity (httpstatus.internal_server_error); }}Hapus operasi
@DeleteMapping ("/delete/book/novel") Public Responentity Delete (@RequestParam (name = "id") string id) {deleteresponse hasil = client.preparedeLete ("book", "novel", id) .get (); mengembalikan responEntity baru (result.getResult (). tostring (), httpstatus.ok); }Operasi pencarian
@GetMapping ("/get/book/novel") Publik responEntity get (@RequestParam (name = "id", defaultValue = "") string id) {if (id.isempty ()) {return new New Responstity (httpstatus.not_found); } GetResponse result = this.client.prepareget ("book", "novel", id) .get (); if (! result.isexists ()) {return new responseEntity (httpstatus.not_found); } return new ResponEntity (result.getSource (), httpstatus.ok); }Pembaruan Operasi
@PutMapping ("/put/book/novel") Pembaruan Tanggapan Publik (@RequestParam (name = "id") ID string, @RequestParam (name = "title", wajib = false) Judul string, @RequestParam (name = "worsor", wajib = false) string) {try {xcontentBuilder Builder = xcont = xcont = xcont (xconton (xcontentBuilder (name) (xcont. if (title! = null) {builder.field ("title", title); } if (penulis! = null) {builder.field ("penulis", penulis); } builder.endObject (); UpdateRequest UpdateRequest = New UpdateRequest ("Book", "Novel", ID); updateRequest.doc (pembangun); Updateresponse hasil = client.update (updateRequest) .get (); mengembalikan responEntity baru (result.getResult (). tostring (), httpstatus.ok); } catch (Exception e) {E.PrintStackTrace (); Return New ResponseEntity (httpstatus.internal_server_error); }}Pencarian majemuk
@GetMapping ("/kueri/buku/novel") kueri responentity publik (@RequestParam (name = "penulis", wajib = false) string penulis, @RequestParam (name = "title", wajib = false) judul string, @RequestParam (name = "gt_word_count", defaultValue = "0") intercaram (name = "gt_word", defaultValue = "0") intercount (name = "gt_word", defaultValue = "0") (name = "gt_word, defaultValue =" 0 ") = false) integer ltwordcount) {boolquerybuilder boolquerybuilder = querybuilders.boolquery (); if (penulis! = null) {boolquerybuilder.must (querybuilders.matchQuery ("penulis", penulis)); } if (title! = null) {boolquerybuilder.must (querybuilders.matchQuery ("title", title)); } RangeQueryBuilder rangeQueryBuilder = querybuilders.rangeQuery ("word_count"). Dari (gtwordcount); if (ltwordcount! = null && ltwordcount> 0) {rangequerybuilder.to (ltwordcount); } boolquerybuilder.filter (rangeQueryBuilder); SearchRequestBuilder SearchRequestBuilder = this.client.preparesearch ("Book") .settypes ("novel") .setsearchType (searchType.dfs_query_then_fetch) .setQuery (boolQueryBuilder) .setFrom (0) .setsize (10); System.out.println (SearchRequestBuilder); // Debug SearchResponse Response = SearchRequestBuilder.get (); Daftar <peta <string, objek >> result = arraylist baru <> (); for (searchHit hit: response.gethits ()) {result.add (hit.getSource ()); } return New ResponseEntity (hasil, httpstatus.ok); }Kode di atas mengatur kueri majemuk yang mirip dengan kueri berikut DSL:
{"query": {"bool": {"harus": [{"match": {"author": "zhang san"}}, {"match": {"title": "elasticsearch"}}], "filter": [{"range": {"wordount": {"gt": "": " }}Meringkaskan
Di atas adalah apa yang diperkenalkan editor ke Springboot mengintegrasikan Elasticsearch dan mengimplementasikan operasi CRUD. Saya harap ini akan membantu semua orang. Jika Anda memiliki pertanyaan, silakan tinggalkan saya pesan dan editor akan membalas semua orang tepat waktu. Terima kasih banyak atas dukungan Anda ke situs web Wulin.com!