البيئة التجريبية
بادئ ذي بدء ، بالطبع ، تحتاج إلى تثبيت بيئة Elasticsearch. من الأفضل تثبيت Head Visual Plust-in Elasticsearch لتسهيلنا لعرض البيانات بشكل حدسي.
بالطبع ، يمكنك الرجوع إلى مشاركتي في هذا الجزء: "تثبيت البحث المرن وملء الحفر على CentOS7"
تم تثبيت ES الخاص بي على http://113.209.119.170:9200/ (يجب تعيين هذا العنوان في مشروع سبرينغ بوت)
إنشاء مشروع الربيع
لا يوجد تفسير خاص لهذا الجزء ، ولكن هناك بعض الأشياء التي يجب توخي الحذر.
لاحظ أنه عند إنشاء مشروع جديد ، تذكر التحقق من تبعيات Elasticsearch في الويب و NOSQL ، ودعونا نلتقط صورة لتوضيح:
عند إنشاء مشروع ، تحقق من خيار التبعية ES في NOSQL.
بعد إنشاء المشروع تلقائيًا ، سيتم إضافة تلقائي تلقائيًا إلى اعتماد SPRING-Boot-Starter-Data-Elasticsearch إلى pom.xml:
<Rependency> <roupeD> org.springframework.boot </rougiD> <intifactid> Spring-boot-starter-data-elasticsearch </insifactid> </perendency>
في هذا المشروع ، نستخدم Jest Open Source Restful ES Java Client Jest ، لذلك نحتاج أيضًا إلى إضافة تبعيات مزاح في pom.xml:
<Rependency> <roupiD> io.searchbox </groupId> <StifactId> Jest </artifactid> </perimency>
بالإضافة إلى ذلك ، يجب عليك إضافة تبعيات JNA:
<Rependency> <roupiD> net.java.dev.jna </rougeid> <StifactId> jna </artifactid> </perimency>
خلاف ذلك ، عند بدء مشروع الربيع ، لم يتم العثور على خطأ من JNA. سيتم تعطيل الطرق الأصلية:
لم يتم العثور على JNA. سيتم تعطيل الطرق الأصلية.
يجب تكوين عنوان خادم ES في تطبيق ملف تكوين المشروع.
الخادم: المنفذ: 6325Spring: Elasticsearch: Jest: Uris: - http://113.209.119.170:9200 # عنوان ES Server! وقت القراءة: 5000
تنظيم الكود
تم تنظيم رمز المشروع الخاص بي على النحو التالي:
تنظيم رمز المشروع
يتم شرح كل جزء من الكود على النحو التالي ، والتعليقات هي:
كيان. جافا
package com.hansonwang99.springboot_es_demo.entity ؛ استيراد java.io.serializable ؛ استيراد org.springframework.data.elasticsearch.annotations.document ؛ الكيان العام preciesable {private static frong serialversionuid = -76363535175171717166 Static Final String INDEX_NAME = "index_entity" ؛ نوع السلسلة النهائية الثابتة العامة = "tstype" ؛ معرف طويل خاص ؛ اسم السلسلة الخاصة ؛ الكيان العام () {super () ؛ } الكيان العام (معرف طويل ، اسم سلسلة) {this.id = id ؛ this.name = name ؛ } public long getId () {return id ؛ } public void setId (id long) {this.id = id ؛ } السلسلة العامة getName () {return name ؛ } public void setName (اسم السلسلة) {this.name = name ؛ }} TestService.java
package com.hansonwang99.springboot_es_demo باطلة التوفير (قائمة <Fictity> entityList) ؛ قائمة <TINTITY> SERPLEENTITY (سلسلة 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 ؛ import io.searchbox.client.jestclient ؛ استيراد io.searchbox.client.jestresult ؛ استيراد io.searchbox.core.bulk logger logger النهائي الثابت = loggerfactory.getLogger (TestServiceImpl.Class) ؛ Autowired Private Jestclient Jestclient ؛ Override public void saveentity (intity ectity) {index index = new index.builder (intity) .index (entity.index_name) .type (entity.type) .build () ؛ حاول {JestClient.execute (index) ؛ logger.info ("es insert كاملة") ؛ } catch (ioException e) {E.PrintStackTrace () ؛ logger.error (e.getMessage ()) ؛ }} / ** * حفظ المحتوى على دفعات إلى es * / Override public void saveentity (قائمة <Testity> entityList) {bulk.builder bulk = new bulk.builder () ؛ لـ (Entity Entity: entityList) {index index = new index.builder (entity) .index (entity.index_name) .type (entity.type) .build () ؛ bulk.addacte (index) ؛ } حاول {jestclient.execute (bulk.build ()) ؛ logger.info ("es insert كاملة") ؛ } catch (ioException e) {E.PrintStackTrace () ؛ logger.error (e.getMessage ()) ؛ }} / *** محتوى البحث في ES* / Override Public List <Fectity> Searchentity (String SearchContent) {SearchOrceBuilder SearchOrceBuilder = New SearchOrceBuilder () ؛ //SearchSourceBuilder.query(querybuilders.querystringQuery(searchContent)) ؛ //SearchSourceBuilder.field("name ") ؛ SearchSourceBuilder.query (QueryBuilders.Matchquery ("name" ، searchContent)) ؛ البحث عن البحث = new search.builder (SearchSourceBuilder.toString ()) .AdDindex (entity.index_name) .addtype (entity.type) .build () ؛ حاول {JestResult result = JestClient.execute (Search) ؛ return result.getSourCeasObjectList (entity.class) ؛ } catch (ioException e) {logger.error (e.getMessage ()) ؛ E.PrintStackTrace () ؛ } إرجاع فارغ ؛ }} entityController.java
حزمة com.hansonwang99.springboot_es_demo.controller ؛ استيراد java.util.arraylist ؛ استيراد java.util.list ؛ استيراد com.hansonwang99.springboot_es_demo.entity org.apache.commons.lang.stringutils ؛ استيراد org.springframework.beans.factory.annotation.autowired ؛ استيراد org.springframework.web.bind.annotation.requestmapp org.springframework.web.bind.annotation.restController ؛@restController@requestMapping ("/entityController") الطبقة العامة entityController {autowired testService CityEsService ؛ requestmapping (value = "/save" ، method = requestMethod.get) السلسلة العامة حفظ (معرف طويل ، اسم السلسلة) {system.out.println ("حفظ الواجهة") ؛ if (id> 0 && stringUtils.isnotempty (name)) {entity newentity = untity (id ، name) ؛ قائمة <TITITY> ADDList = جديد ArrayList <Fectity> () ؛ AddList.add (Newentity) ؛ CityEsService.Saveentity (AddList) ؛ العودة "موافق" ؛ } آخر {إرجاع "قيمة الإدخال السيئة" ؛ }} @requestmapping (value = "/search" ، method = requestMethod.get) القائمة العامة <entity> حفظ (اسم السلسلة) {list <fectity> entityList = null ؛ if (stringUtils.isnotempty (name)) {entityList = cityEsService.Searchentity (name) ؛ } إرجاع entitylist ؛ }}التجارب الفعلية
لإضافة عدة أجزاء من البيانات ، يمكنك استخدام أداة Postman أو يمكنك إدخالها مباشرة في المتصفح ، مثل إضافة 5 قطع من البيانات:
http: // localhost: 6325/entityController/Save؟ id = 1 & name = nanjing sun yat-sen mausoleum http: // localhost: 6325/entityController/save؟ id = 2 & name = nanjing normal inviniation http: // localhost: معبد كونفوشيوس http: // localhost: 6325/entityController/Save؟ id = 4 & name = Hangzhou أيضًا http: // localhost: 6325/entityController/Save؟ id = 5 & name = يبدو أنه لا يوجد مدينة تسمى Jing في جنوب الصين.
تأثير إدخال البيانات هو كما يلي (باستخدام Visual Plug-in Elasticsearch-Head):
تأثير إدراج البيانات
دعنا نقوم بإجراء اختبار بحث: على سبيل المثال ، أريد البحث عن الكلمة الرئيسية "Nanjing"
نحن نكتب في المتصفح:
http: // localhost: 6325/entityController/search؟ name = nanjing
نتائج البحث كما يلي:
نتائج البحث للكلمة الرئيسية "نانجينغ"
جميع السجلات الأربعة مع الكلمة الرئيسية "Nanjing" تم إدراجها الآن!
بالطبع ، يتم استخدام طريقة تجزئة الكلمات القياسية هنا ، ويتم استخدام كل صيني كمصطلح. تم تفتيش جميع السجلات التي تحتوي على الكلمة الرئيسية "South" و "Beijing" ، لكن الدرجات مختلفة. بالطبع ، هناك طرق تجزئة الكلمات الأخرى. في هذا الوقت ، يلزم دعم المكونات الإضافية تجزئة الكلمات الأخرى. هذا غير مغطى هنا ، وسأستكشفه لاحقًا.
ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.