Lingkungan eksperimental
Pertama -tama, tentu saja, Anda perlu menginstal lingkungan Elasticsearch. Yang terbaik adalah menginstal visual plug-in elasticsearch-head untuk memfasilitasi kami untuk melihat data secara intuitif.
Tentu saja, Anda dapat merujuk ke posting saya di bagian ini: "Instalasi pencarian elastis dan lubang pengisian di Centos7"
ES saya diinstal di http://113.209.119.170:9200/ (alamat ini perlu ditetapkan ke proyek Springboot)
Pembuatan Proyek Musim Semi
Tidak ada penjelasan khusus untuk bagian ini, tetapi ada beberapa hal yang harus dihormati.
Perhatikan bahwa saat membuat proyek baru, ingatlah untuk memeriksa dependensi Elasticsearch di web dan NoSQL, dan mari kita ambil gambar untuk diilustrasikan:
Saat membuat proyek, periksa opsi ketergantungan ES di NoSQL.
Setelah proyek dihasilkan secara otomatis, ketergantungan spring-boot-starter-data-Elasticsearch akan ditambahkan secara otomatis ke pom.xml:
<dependency> <GroupId> org.springframework.boot </groupid> <ArTifactId> Spring-boot-starter-data-Eelasticsearch </t Artifactid> </dependency>
Dalam proyek ini, kami menggunakan Open Source Restful ES Java Client Jest, jadi kami juga perlu menambahkan dependensi Jest di pom.xml:
<dependency> <GroupId> io.searchbox </groupid> <ArTifactId> jest </stifactid> </gandendency>
Selain itu, Anda harus menambahkan dependensi JNA:
<dependency> <GroupId> net.java.dev.jna </groupid> <ArTifactid> jna </stifactid> </dependency>
Kalau tidak, saat memulai proyek musim semi, kesalahan JNA tidak ditemukan. Metode asli akan dinonaktifkan.:
Jna tidak ditemukan. Metode asli akan dinonaktifkan.
Alamat server ES perlu dikonfigurasi dalam aplikasi file konfigurasi proyek.yml
Server: Port: 6325Spring: Elasticsearch: Jest: URIS: - http://113.209.119.170:9200 # Alamat ES Server! Waktu baca: 5000
Organisasi Kode
Kode proyek saya disusun sebagai berikut:
Organisasi Kode Proyek
Setiap bagian dari kode dijelaskan sebagai berikut, dan komentarnya adalah:
Entity.java
Paket com.hansonwang99.springboot_es_demo.entity; impor java.io.serializable; impor org.springframework.data.elasticsearch.annotations.document; entitas kelas publik; Serializable {private static long serialversionuid = -76363331351515151515151515151515163163163163163151515151515151515161.Annotations. public static final string index_name = "index_entity"; Public Static Final String Type = "TStype"; ID Panjang Pribadi; nama string pribadi; entitas publik () {super (); } Public Entity (Long ID, String Name) {this.id = id; this.name = name; } public long getId () {return id; } public void setId (Long ID) {this.id = id; } public string getName () {return name; } public void setName (name string) {this.name = name; }} Testservice.java
Paket com.hansonwang99.springboot_es_demo.service; impor com.hansonwang99.springboot_es_demo.entity.entity; impor java.util.list; antarmuka publik testservice {void saveentity (entitas entitas); void saveEntity (Daftar <Stity> EntityList); Daftar <STity> SearchEntity (String SearchContent);}TestServiceImpl.java
Paket com.hansonwang99.springboot_es_demo.service.impl; impor java.io.ioexception; import java.util.list; com.hansonwang99.springboot_es_demo.entity.entity; com.hanssonwang99.springboot org.elasticsearch.index.query.QueryBuilders;import org.elasticsearch.search.builder.SearchSourceBuilder;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.service; impor io.searchbox.client.jestClient; impor io.searchbox.client.jestresult; impor io.searchbox.core.bulk; Impor @searchbox.core.index; impor io.searchbox static final Logger Logger = LoggerFactory.getLogger (testServiceImpl.class); @Autowired Private JestClient JestClient; @Override public void saveTity (entitas entitas) {index index = new index.builder (entitas) .index (entity.index_name) .type (entity.type) .build (); coba {jestclient.execute (index); Logger.info ("Es Insert Complete"); } catch (ioException e) {e.printstacktrace (); Logger.error (e.getMessage ()); }} / ** * Simpan konten dalam batch ke es * / @Override public void saveEntity (Daftar <STity> entityList) {bulk.builder bulk = new bulk.builder (); untuk (entitas entitas: entitylist) {index index = new index.builder (entitas) .index (entity.index_name) .type (entity.type) .build (); bulk.addaction (indeks); } coba {jestclient.execute (bulk.build ()); Logger.info ("Es Insert Complete"); } catch (ioException e) {e.printstacktrace (); Logger.error (e.getMessage ()); }} / *** Cari Konten di ES* / @Override Daftar Publik <STity> SearchEntity (String SearchContent) {SearchSourceBuilder SearchSourceBuilder = new SearchSourceBuilder (); //searchsourceBuilder.query(QueryBuilders.QueryStringQuery(searchContent)); //searchsourceBuilder.field("name "); SearchSourceBuilder.Query (QueryBuilders.MatchQuery ("Name", SearchContent)); Pencarian pencarian = pencarian baru. coba {hasil jestresult = jestclient.execute (cari); return result.getSourCeAsObjectList (entity.class); } catch (ioException e) {logger.error (e.getMessage ()); e.printstacktrace (); } return null; }} EntityController.java
Paket com.hansonwang99.springboot_es_demo.controller; import java.util.arraylist; import java.util.list; com.hansonwang99.springboot_es_demo.entity.entity; com.hanssonwang99.springboot org.apache.commons.lang.stringutils; impor org.springframework.beans.factory.annotation.Autowired; Impor org.springframework.web.bind.annotation.Requestmapping; impor org.springframework.web.bind.annotation.notation.ruesation org.springframework.web.bind.annotation.RestController;@restcontroller@requestMapping ("/entityController") kelas publik EntityController {@Autowired testservice cityesservice; @RequestMapping (value = "/save", Method = requestMethod.get) Public String Simpan (ID Panjang, Nama String) {System.out.println ("Simpan Antarmuka"); if (id> 0 && stringutils.isnotEmpty (name)) {entity newEntity = entity baru (id, name); Daftar <STITY> ADDLIST = ArrayList baru <Stity> (); addlist.add (newentity); cityesservice.saveentity (addlist); Kembalikan "OK"; } else {return "nilai input buruk"; }} @RequestMapping (value = "/search", Method = requestMethod.get) Daftar publik <STity> simpan (nama string) {Daftar <Stity> entitylist = null; if (stringutils.isnotempty (name)) {entitylist = cityesservice.searchentity (name); } return entitylist; }}Eksperimen aktual
Untuk menambahkan beberapa bagian data, Anda dapat menggunakan alat postman atau Anda dapat memasukkannya langsung di browser, seperti menambahkan 5 lembar data berikut:
http: // localhost: 6325/entitycontroller/save? id = 1 & name = nanjing sun yat-sen mausoleum http: // localhost: 6325/entitycontroller/save? id = 2 & name = nanjing universitas normal di china http: // save? id = 2 & name = nanjing normal universitas di china http: // localhost = 63 name/name/nanjing di China http: ///name htan/name = nanjing di china http://name htanhing = 63 name/name/nanjing di china http://localhost = 63.32 Kuil Konfusius http: // localhost: 6325/entitycontroller/save? Id = 4 & name = hangzhou juga sangat bagus http: // localhost: 6325/entitycontroller/save? Id = 5 & name = sepertinya tidak ada kota yang disebut jing di selatan Cina.
Efek penyisipan data adalah sebagai berikut (menggunakan visual plug-in elasticsearch-head):
Efek penyisipan data
Mari Lakukan Tes Pencarian: Misalnya, saya ingin mencari kata kunci "Nanjing"
Kami mengetik di browser:
http: // localhost: 6325/EntityController/Search? Name = Nanjing
Hasil pencarian adalah sebagai berikut:
Hasil pencarian untuk kata kunci "Nanjing"
Keempat catatan dengan kata kunci "Nanjing" yang dimasukkan baru saja dicari!
Tentu saja, metode segmentasi kata standar digunakan di sini, dan setiap orang Cina digunakan sebagai istilah. Semua catatan yang berisi kata kunci "selatan" dan "Beijing" telah dicari, tetapi skornya berbeda. Tentu saja, ada metode segmentasi kata lain. Pada saat ini, dukungan plug-in segmentasi kata lain diperlukan. Ini tidak tercakup di sini, dan saya akan menjelajahinya nanti.
Di atas adalah semua konten artikel ini. Saya berharap ini akan membantu untuk pembelajaran semua orang dan saya harap semua orang akan lebih mendukung wulin.com.