สภาพแวดล้อมการทดลอง
ก่อนอื่นคุณต้องติดตั้งสภาพแวดล้อม Elasticsearch เป็นการดีที่สุดที่จะติดตั้งปลั๊กอิน Elasticsearch-Head เพื่ออำนวยความสะดวกให้เราดูข้อมูลโดยสังหรณ์ใจ
แน่นอนคุณสามารถอ้างถึงโพสต์ของฉันในส่วนนี้: "การติดตั้งการค้นหาแบบยืดหยุ่นและการเติมหลุมบน centos7"
ES ของฉันติดตั้งที่ http://113.209.119.170:9200/ (ที่อยู่นี้จะต้องได้รับมอบหมายให้โครงการ Springboot)
การสร้างโครงการฤดูใบไม้ผลิ
ไม่มีคำอธิบายพิเศษสำหรับส่วนนี้ แต่มีบางสิ่งที่ต้องระวัง
โปรดทราบว่าเมื่อสร้างโครงการใหม่อย่าลืมตรวจสอบการพึ่งพา Elasticsearch ในเว็บและ NOSQL และลองถ่ายรูปเพื่อแสดง:
เมื่อสร้างโครงการให้ตรวจสอบตัวเลือกการพึ่งพา ES ใน NOSQL
หลังจากโครงการถูกสร้างขึ้นโดยอัตโนมัติการพึ่งพาสปริง-สตาร์สตาร์-ดาต้า-Elasticsearch จะถูกเพิ่มลงใน pom.xml โดยอัตโนมัติ:
<การพึ่งพา> <roupId> org.springframework.boot </groupId> <ratifactid> Spring-Boot-Starter-Data-Elasticsearch </artifactId>
ในโครงการนี้เราใช้ไคลเอนต์ es java java jest ดังนั้นเราจึงต้องเพิ่มการพึ่งพา jest ใน pom.xml:
<Effercing> <roupId> iO.SearchBox </GroupId> <ratifactId> jest </artifactId> </derness>
นอกจากนี้คุณต้องเพิ่มการพึ่งพา JNA:
<Ederency> <roupId> net.java.dev.jna </groupId> <ratifactid> jna </artifactid> </dermentency>
มิฉะนั้นเมื่อเริ่มโครงการฤดูใบไม้ผลิข้อผิดพลาดของ JNA ไม่พบ วิธีการดั้งเดิมจะถูกปิดใช้งาน:
ไม่พบ JNA วิธีการดั้งเดิมจะถูกปิดใช้งาน
ที่อยู่เซิร์ฟเวอร์ ES จำเป็นต้องได้รับการกำหนดค่าในไฟล์กำหนดค่าโครงการ Application.yml
เซิร์ฟเวอร์: พอร์ต: 6325SPRING: ELASTICSEARCH: JEST: URIS: - http://113.209.119.170:9200 # ที่อยู่ของเซิร์ฟเวอร์ ES! อ่านเวลา: 5,000
องค์กรรหัส
รหัสโครงการของฉันถูกจัดระเบียบดังนี้:
องค์กรรหัสโครงการ
แต่ละส่วนของรหัสมีการอธิบายดังนี้และความคิดเห็นคือ:
entity.java
แพ็คเกจ com.hansonwang99.springboot_es_demo.entity; นำเข้า java.io.serializable; นำเข้า org.springframework.data.elasticsearch.annotations.document; เอนทิตีระดับสาธารณะ สตริงสุดท้ายคงที่ public index_name = "index_entity"; สตริงสุดท้ายแบบคงที่สาธารณะ = "tstype"; ID ยาวส่วนตัว; ชื่อสตริงส่วนตัว; Entity Public () {super (); } เอนทิตีสาธารณะ (ID ยาว, ชื่อสตริง) {this.id = id; this.name = ชื่อ; } สาธารณะ Long getId () {return id; } โมฆะสาธารณะ setId (Long id) {this.id = id; } สตริงสาธารณะ getName () {ชื่อคืน; } โมฆะสาธารณะ setName (ชื่อสตริง) {this.name = name; - testservice.java
แพ็คเกจ com.hansonwang99.springboot_es_demo.service; นำเข้า com.hansonwang99.springboot_es_demo.entity.entity; นำเข้า java.util.list; ถือเป็นโมฆะ saveEntity (รายการ <entity> entityList); รายการ <entity> searchEntity (String SearchContent);}
testserviceimpl.java
แพ็คเกจ com.hansonwang99.springboot_es_demo.service.impl; นำเข้า java.io.ioexception; นำเข้า java.util.list; นำเข้า com.hansonwang99.springboot_es_demo.entity.entity; org.elasticsearch.index.query.QueryBuilders; นำเข้า org.elasticsearch.search.builder.SearchSourceBuilder; นำเข้า org.slf4j.logger; นำเข้า org.slf4j.loggerfactory; org.springframework.stereotype.service; นำเข้า io.searchbox.client.jestclient; นำเข้า io.searchbox.client.jestresult; นำเข้า io.searchbox.core.bulk; นำเข้า Io.Searchbox.core.index; import iO.searchbox.core Logger Logger สุดท้ายคงที่ = loggerFactory.getLogger (testserviceimpl.class); @autowired jestclient ส่วนตัว jestclient; @Override โมฆะสาธารณะ saveIntity (เอนทิตีเอนทิตี) {ดัชนีดัชนี = new index.builder (เอนทิตี) .index (entity.index_name) .type (entity.type) .build (); ลอง {jestclient.execute (ดัชนี); logger.info ("ES แทรกเสร็จสมบูรณ์"); } catch (ioexception e) {e.printstacktrace (); logger.error (e.getMessage ()); }} / ** * บันทึกเนื้อหาในแบทช์ไปยัง ES * / @Override โมฆะสาธารณะ saveIntity (รายการ <เอนทิตี> EntityList) {BULK.BUILDER BULK = ใหม่ BULK.BUILDER (); สำหรับ (เอนทิตีเอนทิตี: entityList) {ดัชนีดัชนี = ใหม่ index.builder (เอนทิตี) .index (entity.index_name) .type (entity.type) .build (); จำนวนมาก (ดัชนี); } ลอง {jestclient.execute (bulk.build ()); logger.info ("ES แทรกเสร็จสมบูรณ์"); } catch (ioexception e) {e.printstacktrace (); logger.error (e.getMessage ()); }} / *** การค้นหาเนื้อหาใน es* / @Override รายการสาธารณะ <เอนทิตี> SearchEntity (String SearchContent) {SearchSourceBuilder SearchSourceBuilder = ใหม่ SearchSourceBuilder (); //SearchSourceBuilder.Query(queryBuilders.QueryStringQuery(SearchContent)); //SearchSourceBuilder.field("Name "); SearchSourceBuilder.Query (queryBuilders.MatchQuery ("ชื่อ", SearchContent)); search search = new search.builder (searchSourceBuilder.toString ()) .AdDindex (entity.index_name) .addType (entity.type) .build (); ลอง {jestresult result = jestClient.execute (ค้นหา); return result.getSourceAsObjectList (entity.class); } catch (ioexception e) {logger.error (e.getMessage ()); E.PrintStackTrace (); } return null; - EntityController.java
แพ็คเกจ com.hansonwang99.springboot_es_demo.controller; นำเข้า java.util.arraylist; นำเข้า java.util.list; นำเข้า com.hansonwang99.springboot_es_demo.entity.entity; org.apache.commons.lang.stringutils; นำเข้า org.springframework.beans.factory.annotation.autowired; นำเข้า org.springframework.web.bind.annotation.requestmapping; org.springframework.web.bind.annotation.restcontroller;@restcontroller@requestmapping ("/EntityController") EntityControll ของคลาสสาธารณะ @RequestMapping (value = "/save", method = requestMethod.get) สตริงสาธารณะบันทึก (id ยาว, ชื่อสตริง) {system.out.println ("บันทึกอินเตอร์เฟส"); if (id> 0 && stringUtils.isnotEmpty (ชื่อ)) {entity newEntity = นิติบุคคลใหม่ (id, ชื่อ); รายการ <entity> addList = new ArrayList <เอนทิตี> (); addlist.add (NewEntity); Cityesservice.Saveentity (addlist); กลับ "ตกลง"; } else {return "ค่าอินพุตที่ไม่ดี"; }} @RequestMapping (value = "/search", method = requestMethod.get) รายการสาธารณะ <เอนทิตี> บันทึก (ชื่อสตริง) {รายการ <entity> entityList = null; if (stringutils.isnotEmpty (ชื่อ)) {entityList = cityesservice.searchentity (ชื่อ); } return entityList; -การทดลองจริง
ในการเพิ่มข้อมูลหลายชิ้นคุณสามารถใช้เครื่องมือบุรุษไปรษณีย์หรือคุณสามารถป้อนได้โดยตรงในเบราว์เซอร์เช่นการเพิ่มข้อมูล 5 ชิ้นต่อไปนี้:
http: // localhost: 6325/entitycontroller/บันทึก? id = 1 & name = nanjing sun yat-sen mausoleum http: // localhost: 6325/entitycontroller/บันทึก? id = 2 & name = nanjing มหาวิทยาลัยปกติในประเทศจีน HTT วัดขงจื้อ http: // localhost: 6325/entitycontroller/บันทึก? id = 4 & name = hangzhou เป็น http ที่ดีมาก: // localhost: 6325/entitycontroller/บันทึก? id = 5 & name = ดูเหมือนว่าไม่มีเมืองที่เรียกว่าการ jing ทางตอนใต้ของจีน
เอฟเฟกต์การแทรกข้อมูลมีดังนี้ (โดยใช้ปลั๊กอิน Elasticsearch-Head):
เอฟเฟกต์การแทรกข้อมูล
ลองทำแบบทดสอบการค้นหา: ตัวอย่างเช่นฉันต้องการค้นหาคำหลัก "หนานจิง"
เราพิมพ์ในเบราว์เซอร์:
http: // localhost: 6325/entitycontroller/search? name = nanjing
ผลการค้นหามีดังนี้:
ผลการค้นหาสำหรับคำหลัก "หนานจิง"
ทั้งสี่ระเบียนที่มีคำหลัก "หนานจิง" ที่แทรกอยู่ตอนนี้ถูกค้นหาแล้ว!
แน่นอนว่าวิธีการแบ่งส่วนคำมาตรฐานใช้ที่นี่และแต่ละภาษาจีนจะใช้เป็นคำ ระเบียนทั้งหมดที่มีคำหลัก "ใต้" และ "ปักกิ่ง" ได้รับการค้นหา แต่คะแนนนั้นแตกต่างกัน แน่นอนว่ามีวิธีการแบ่งส่วนคำอื่น ๆ ในเวลานี้จำเป็นต้องมีการสนับสนุนปลั๊กอินการแบ่งส่วนคำอื่น ๆ สิ่งนี้ไม่ได้ครอบคลุมที่นี่และฉันจะสำรวจในภายหลัง
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น