Versuchsumgebung
Zunächst müssen Sie die Elasticsearch -Umgebung natürlich installieren. Es ist am besten, den visuellen Plug-in-Elasticsearch-Head zu installieren, um uns zu erleichtern, Daten intuitiv anzuzeigen.
Natürlich können Sie sich in diesem Teil auf meinen Beitrag beziehen: "Elastische Suchinstallation und Füllung von Gruben auf CentOS7"
Mein ES ist unter http://113.209.119.170:9200/ installiert (diese Adresse muss dem Springboot -Projekt zugewiesen werden)
Frühjahrsprojekterstellung
Es gibt keine besondere Erklärung für diesen Teil, aber es gibt ein paar Dinge, auf die Sie vorsichtig sind.
Beachten Sie, dass beim Erstellen eines neuen Projekts die Elasticsearch -Abhängigkeiten in Web und NoSQL überprüfen und ein Bild aufnehmen, um zu veranschaulichen:
Überprüfen Sie beim Erstellen eines Projekts die Option für ES -Abhängigkeiten in NoSQL.
Nachdem das Projekt automatisch generiert wurde, wird die Abhängigkeit von Spring-Boot-Starter-Data-Elasticsearch automatisch zu pom.xml hinzugefügt:
<Depopentcy> <gruppe> org.springFramework.boot </Groupid> <artifactId> Spring-Boot-Starter-Data-E-E-E-E-E-E-ELASTICSEarch </artifactid> </abhängig>
In diesem Projekt verwenden wir den Open Source Ruheful ES Java Client -Scherz, sodass wir auch Scherzabhängigkeiten in pom.xml hinzufügen müssen:
<Depopenty> <gruppe> io.searchbox </Groupid> <artifactId> scherze </artifactid> </abhängig>
Zusätzlich müssen Sie JNA -Abhängigkeiten hinzufügen:
<Depopenty> <gruppe> net.java.dev.jna </Groupid> <artifactid> jna </artifactid> </abhängig>
Andernfalls, wenn das Frühlingsprojekt startet, ist ein Fehler von JNA nicht gefunden. Native Methoden werden deaktiviert .:
JNA nicht gefunden. Native Methoden werden deaktiviert.
Die ES -Serveradresse muss in der Projektkonfigurationsdateianwendung.yml konfiguriert werden
Server: Port: 6325spring: Elasticsearch: Scherz: URIS: - http://113.209.119.170:9200 # Adresse von ES Server! Read-Timeout: 5000
Codeorganisation
Mein Projektcode ist wie folgt organisiert:
Projektcodeorganisation
Jeder Teil des Codes wird wie folgt erklärt, und die Kommentare sind:
Entity.java
Paket com.hansonwang99.springboot_es_demo.entity; import Java.io.Serializable; public static final String index_name = "index_entity"; public static final String type = "tstype"; private lange Ausweis; privater Zeichenfolge Name; öffentliche Entität () {Super (); } öffentliche Entität (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 (String -Name) {this.name = name; }} TestService.java
Paket com.hansonwang99.springboot_es_demo.service; import com.hansonwang99.springboot_es_demo.entity.entity; import Java.util.list; public interface testService {void Saveentity (Entity Entity); void SaveEntity (List <entity> EntityList); LIST <Stity> Searchentity (String SearchContent);}TestServiceImpl.java
Paket com.hansonwang99.springboot_es_demo.service.impl; importieren java.io.ioxception; import Java.util.list; com.hansonwang99.springboots_es_demo.entity.entity; org.elasticsarch.index.query.querybuilders; import org.elasticsearch.search.builder.searchsourcebuilder; import org.slf4j.logger; import org.slf4j.loggerfactory; import org. org.springframework.stereotype.service; import io.searchbox.client.jestclient; import io.searchbox.client.jestresult; import IO.Searchbox.core.bulk; Import io.Searchbox.core.index; static Final Logger logger = loggerFactory.getLogger (testServiceImpl.class); @Autowired Private Jestclient Jestclient; @Override public void SaveEntity (Entity Entity) {index index = neuer index.builder (Entity) .Index (entity.index_name) .type (Entity.Type) .build (); try {jestclient.execute (index); Logger.info ("es vollständig einfügen"); } catch (ioException e) {e.printstacktrace (); Logger.Error (e.getMessage ()); }} / ** * Inhalt in Stapeln auf ES * / @Override public void SaveEntity (Liste <Entity> EntityList) {bulk.builder bulk = new Bulk.builder () speichern; für (Entity Entity: EntityList) {index index = neuer index.builder (Entity) .Index (entity.index_name) .type (entity.type) .build (); Bulk.Addaction (Index); } try {jestclient.execute (bulk.build ()); Logger.info ("es vollständig einfügen"); } catch (ioException e) {e.printstacktrace (); Logger.Error (e.getMessage ()); }} / *** Inhalt in ES* / @Override public list <entity> suchEntity (String SearchContent) {SearchSourCebuilder SearchSourCebuilder = New SearchSourCebuilder (); //searchSourcebuilder.Query(QueryBuilders.queryStringQuery(SearchContent)); //searchSourcebuilder.field("Name "); SearchSourcebuilder.Query (querybuilders.matchQuery ("Name", SearchContent)); Search Search = new Search.builder (SearchSourcebuilder.toString ()) .AddIndex (entity.index_name) .addType (Entity.Type) .build (); try {Jestresult result = jestclient.execute (such); 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; org.apache.commons.lang.Stringutils; import org.springframework.bean.factory.annotation.autowired; import org.springframework.web.bind.annotation org.springframework.web.bind.annotation.restController;@rastcontroller@requestmapping ("/entityController") öffentliche Klasse EntityController {@autowered testService CityService; @RequestMapping (value = "/save", method = requestMethod.get) public String speichern (Long ID, String -Name) {System.out.println ("Save Interface"); if (id> 0 && stringutils.isnotEmpty (name)) {Entity newentity = new Entity (id, name); List <entity> addlist = new ArrayList <entity> (); addlist.add (NewEntity); Cityesservice.Saveentity (Addlist); zurück "ok"; } else {return "schlechter Eingangswert"; }} @RequestMapping (value = "/search", method = requestMethod.get) öffentliche Liste <Entity> speichern (String -Name) {list <entity> entityList = null; if (stringutils.isnotEmpty (name)) {entityList = Cityesservice.searchentity (Name); } return entityList; }}Tatsächliche Experimente
Um mehrere Daten hinzuzufügen, können Sie das Postman -Tool verwenden oder es direkt in den Browser eingeben, z. B. das Hinzufügen der folgenden 5 Datenstücke:
http: // localhost: 6325/entityController/save? id = 1 & name = nanjing sun yat-ssen mausoleum http: // localhost: 6325/enttityController/save? id = 2 & nanjing normale Universität in China http: ///LaDing: 6325/enttityContruler/save ///LaShost: 6325/enttityContruler/save ///LaD: // localhost: 6325/enttitycontruler/save- Konfuzius Tempel http: // localhost: 6325/entityController/save? Id = 4 & name = hangzhou ist auch sehr gut http: // localhost: 6325/entityController/save? Id = 5 & name = es scheint, dass es keine Stadt namens Jing im Süden von China gibt.
Der Dateninsertionseffekt ist wie folgt (unter Verwendung des visuellen Plug-in-Elasticsearch-Heads):
Dateninsertionseffekt
Lassen Sie uns einen Suchtest durchführen: Zum Beispiel möchte ich nach dem Schlüsselwort "Nanjing" suchen
Wir geben den Browser ein:
http: // localhost: 6325/entityController/such? name = nanjing
Die Suchergebnisse sind wie folgt:
Suchergebnisse für Keyword "Nanjing"
Alle vier Datensätze mit dem Keyword "Nanjing", das gerade eingefügt wurde, wurden durchsucht!
Natürlich wird hier die Standard -Segmentierungsmethode für die Segmentierung von Standards verwendet, und jeder Chinesen wird als Begriff verwendet. Alle Datensätze, die das Schlüsselwort "South" und "Peking" enthalten, wurden durchsucht, aber die Punktzahlen sind unterschiedlich. Natürlich gibt es andere Wortsegmentierungsmethoden. Zu diesem Zeitpunkt ist die Unterstützung anderer Word-Segmentierungs-Plug-Ins erforderlich. Dies wird hier nicht behandelt, und ich werde es später untersuchen.
Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.