Wie wir alle wissen, wird Elasticsearch als ES bezeichnet, der auf einem auf Lucene basierenden Suchserver basiert. Es bietet eine verteilte Multi-Benutzer-Funktions-Volltext-Suchmaschine basierend auf der erholsamen Weboberfläche. Elasticsearch wurde in Java entwickelt und als Open Source unter den APache -Lizenz als Open Source veröffentlicht. Es ist derzeit eine beliebte Suchmaschine auf Unternehmensebene. In Cloud Computing entwickelt, kann es in Echtzeitsuche, Stabilität, Zuverlässigkeit, schnell und einfach zu installieren und benutzt werden.
Wir erstellen eine Website oder Anwendung und fügen Suchfunktionen hinzu, aber es ist sehr schwierig, einen Suchauftrag zu erstellen. Wir möchten, dass die Suchlösung schnell ausgeführt wird. Wir möchten eine Null-Konfiguration und einen vollständig kostenlosen Suchmodus. Wir möchten JSON einfach verwenden, um Daten über HTTP zu indexieren. Wir möchten, dass unser Suchserver immer verfügbar ist. Wir möchten in der Lage sein, von einer und skalieren zu Hunderten zu skalieren. Wir möchten in Echtzeit in Echtzeit ein einfaches Multi-Messen sein, wir möchten eine Cloud-Lösung erstellen. Deshalb verwenden wir Elasticsearch, um all diese Probleme und weitere andere Probleme zu lösen, die auftreten können.
Bei der Verwendung von ES in Java möchte ich nur das Problem lösen, dass die Abfragegeschwindigkeit nicht schnell genug ist und die Effizienz nicht hoch genug ist. Die einzelne Abfrage von Daten aus der Datenbank kann die aktuellen Geschäftsanforderungen nicht mehr erfüllen. OK! Lassen Sie uns nun darüber sprechen, wie Sie den magischen Suchserver von ES in Java verwenden. Zunächst müssen Sie das ES -Abhängigkeitspaket verweisen, und die Abhängigkeiten sind wie folgt:
<dependency><groupId>org.elasticsearch.client</groupId><artifactId>transport</artifactId><version>5.5.0</version> </dependency><groupId>org.elasticsearch.client</groupId><artifactId>transport</artifactId><version>5.5.0</version> </dependency> <Depopenty> <gruppe> org.Elasticsearch </GroupID> <artifactId> ElasticSearch </artifactId> <version> 5.5.0 </Version> </abhängig>
OK, nachdem wir die Abhängigkeiten hinzugefügt haben, geben wir die ES -Nutzungsphase ein. Übrigens gibt es ein Problem, das erklärt werden muss. Um ES zu verwenden, müssen Sie das JDK1.8 -Toolkit installieren und Tomcat sollten Version 7.05 oder höher sein, andernfalls werden ES nicht unterstützt, und bei der Integration in das Projekt kann ein Fehler gemeldet werden! Es gibt auch Installation und Download von ES. Hier ist die Download -Adresse: https://www.elastic.co/downloads/elasticsarch
Nachdem alles fertig ist, werden wir in den Moment eintreten, auf den wir uns wirklich freuen. Was, ja, wie man die Dinge auf dem ES -Server in Java sucht und abfragt, lassen Sie mich sie einzeln für Sie enthüllen:
Erstens empfehlen wir eine ES -Toolklasse
Paket com.osa.utils; import java.io.bufufferedReader; import Java.io.ioException; import Java.io.inputStreamReader; Import Java.io.printwriter; import Java.net.url; java.util.list; import Java.util.map; import Java.util.set; import org.apache.http.client.clientProtocolexception; com.alibaba.fastjson.jsonArray; import Com.alibaba.fastjson.jsonCross; {/** * Senden Sie eine Anforderung an die angegebene URL * * @param URL * URL, um die Anforderung zu senden. * @return URL -Antwort Ergebnis der Remote -Ressource, die durch die Remote -Ressource dargestellt wird BufferedReader in = null; Versuchen Sie {String urlnamestring = url + "?" + Param; URL realUrl = neue URL (urlnamestring); // Öffnen Sie die Verbindung zwischen der URL -URLConnection Connection = RealUrl.Openconnection (); // Setzen Sie die allgemeine Anfrage -Attributverbindung. Connection.SetRequestProperty ("Verbindung", "Keep-Alive"); Connection.SetRequestProperty ("Benutzer-Agent", "Mozilla/4.0 (kompatibel; MSIE 6.0; Windows NT 5.1; SV1)"); // eine tatsächliche Verbindungsverbindung erstellen.Connect (); // Alle Antwort -Header -Felder karten <String, Liste <String >> map = Connection.GetheaDerFields (); // Alle Antwort-Header-Felder für (String-Schlüssel: map.keyset ()) {System.out.println (Schlüssel + "--->" + map.get (Schlüssel)); } // Definieren Sie den BufferedReader -Eingangsstream, um die Antwort der URL in = neuer BufferedReader (neuer InputStreamReader (Connection.GetInputStream ())) zu lesen; Stringlinie; while ((line = in.readline ())! = null) {result += line; }} catch (Ausnahme e) {System.out.println ("Ausnahme ist beim Senden einer GET -Anfrage aufgetreten!" + e); E. printstacktrace (); } // Verwenden Sie schließlich Block, um den Eingabestream schließlich zu schließen. {Try {if (in! = Null) {in.close (); }} catch (Ausnahme e2) {e2.printstacktrace (); }} Rückgabeergebnis; } /** * Senden Sie eine Anforderung an die angegebene URL * @Param URL * URL, um den Anforderungsanforderung zu senden * @return Antwort Ergebnis der Remote -Ressource, die durch */ public static String SendPost (String -URL, String -Param) {printwriter out = null; BufferedReader in = null; String result = ""; Versuchen Sie {url realurl = new URL (URL); // Öffnen Sie die Verbindung zwischen urlConnection conn = realUrl.openconnection (); // Setzen Sie das allgemeine Anfrageattribut Conn.SetRequestProperty ("Accept", "*/*"); Conn.SetRequestProperty ("Verbindung", "Keep-Alive"); Conn.SetRequestProperty ("User-Agent", "Mozilla/4.0 (kompatibel; MSIE 6.0; Windows NT 5.1; SV1)"); // Um eine Postanforderung zu senden, müssen Sie die folgenden zwei Zeilen auf Conn.SetDoOutput (True) festlegen. Conn.SetDoInput (true); // den Ausgabestream abrufen, der dem urlConnection -Objekt entspricht = neuer Pressewriter (conn.getOutputStream ()); // den Anforderungsparameter aussenden.print (param); // puffer out.flush () des Flush -Ausgangsstroms; // Definieren Sie den BufferedReader -Eingangsstream, um die Antwort der URL in = neuer BufferedReader (neuer InputStreamReader (Conn.GetInputStream ())) zu lesen; Stringlinie; while ((line = in.readline ())! = null) {result += line; }} catch (Ausnahme e) {System.out.println ("Ausnahme ist beim Senden einer Postanforderung aufgetreten!" +e); E. printstacktrace (); } // Verwenden Sie schließlich blockiert, um den Ausgabestream und den Eingabestream schließlich zu schließen. {Try {if (out! = Null) {out.close (); } if (in! = null) {in.close (); }} catch (ioException ex) {ex.printstacktrace (); }} Rückgabeergebnis; }} Nachdem die Werkzeugkurs verfügbar ist, können Sie feststellen, dass es zwei Methoden zum Senden von Anfragen gibt. Eine ist die Sendet- und SendPost -Methoden. Die beiden Methoden können basierend auf ihren eigenen Entscheidungen ausgewählt werden. Dies ist natürlich nur eine Methode zum Senden von Anfragen. Wie rufe ich sie an? Da wir hier nach ES abfragen, müssen MyBatis- oder Hibernate -Frameworks nicht verwendet werden. Sie können SQL selbst in der Datenebene selbst definieren und dann SQL wie folgt über die Methode Sendet/sendPost über die vorherige Werkzeugklasse aufrufen:
String sql = urlencoder.encode ("Aus der Tabelle auswählen"); codieren die Methode hauptsächlich einige Räume in SQL
String result = httpSentutils.sendget ("http://221.124.71.8:9200/_SQL", "SQL ="+SQL); IP Plus -Port kann bei der Installation konfiguriert werden
OK! Im Allgemeinen können die Daten in ES abgerufen werden, wenn das Senden erfolgreich ist. Da die zurückgegebenen JSON -Daten in ES die JSON -Zeichenfolge formatieren.
net.sf.json.jsonObject jsonObject = net.sf.json.jsonObject.fromObject (Ergebnis); // Die Hits tag net.sf.json.jsonObject hitsjsonObject = jsonObject.getJsonObject ("Hits"); Nachdem die Daten erhalten wurden, wird der Schluss gezogen, dass es sich um Geschäftsbetriebe handelt. Es ist fast hier.
In den oben genannten Abfragen geht es also. Was sollten wir also tun, wenn wir Daten in ES einfügen müssen? Geben Sie ein Beispiel an
Paket com.sojson.core.Elasticsearch.Manager; Import Java.util.ArrayList; Import Java.util.hashMap; Import Java.util.List; Import Java.util.map; Net.sf.json.jsonObject; import org.elasticsarch.Action.bulk.bulk.bulk.bulk.bulk.bulk.bulk.bulk.bulk.bulk.bulk.bulk.bulk.bulk.bulk.bulk.bulk.bulk.bulk.bulk.bulk.bulk.bulk.bulk.bulk.bulk.bulk.bulk.bulk.bulk.bulk.bulk.bulk.bulk.bulk.bulk.bulk.bulk.bulk.bulk.bulk.bulk.bulkrequest -Bulkrequest -Fall; org. IDNAME -ID -Feldname*@Param JSON Der gespeicherte JSON kann Karte akzeptieren.
Die übergebenen Parameter werden verarbeitet und als Speichernmethode zur Durchführung des Einfügungsvorgangs bezeichnet
/*** Daten zu Elasticsearch*@Param Index Index hinzufügen*@Param -Typ Typ*@Param IDNAME -ID -Feldname*@Param Listata Eine Sammlung von Objekten*@return*/@unterdrücktewarnings ("Unbekämpft") publicStaticMapsave (String -Index, String -Typ, String -Idname, Listlistata) {bulkrequestbuilder bulkrequest bulkrequest bulkrequest bulkrequest bulkrequest bulkrequest = Estools.client.preparebulk (). SetReFresh (true); MAP resultMap = newashMap (); für (Objekt Objekt: listData) {jsonObject json = jsonObject.fromObject (Objekt); // Nein IDName wird angegeben, dann lass Elasticsarch automatisch generieren. If(StringUtils.isBlank(idName)){IndexRequestBuilder lrb =ElasticsearchUtils.client .prepareIndex(index, type) .setSource(json);bulkRequest.add(lrb);//ElasticsearchUtils is a tool class, which is configured with some es configuration information}else{String idValue = Json.optstring (idName); IndexRequestBuilder lrb = estools.client.prepareIndex (Index, Typ, idValue) .setSource (JSON); Bulkrequest.Add (LRB);}} Bulkresponse Bulkresponse = bulkrequest.execute (). actionget (); if (bulkresponse.hasfailures ()) {// Verarbeitungsfehler durch Iterieren jedes Bulk -Antwortelements -Systems.out.println (BulkResponse.GetItitems (). ToString (); resultMap;} bulkrequest = estools.client.preparebulk (); resultmap.put ("200", "Save ES erfolgreich!"); return resultMap;}} ElasticSearchutils Tool Class
öffentliche Klasse ElasticSearchUtils {private statische endgültige String -String cluster_name = "cluster.name"; private statische endgültige Zeichenfolge es_ip = "es.ip"; Setts.builder (). Put (cluster_name, configUtils.getConfig (cluster_name)). Build (); if (client! Integer.ParseInt (configUtils.getConfig (es_port))));} return client;} Das obige ist die Einfügungsoperation. Okay, das ist alles für die heutige Zusammenfassung. Ich hoffe, es kann Ihnen kleine Hilfe bringen, und ich hoffe, Sie können Wulin.com mehr unterstützen.