Comme nous le savons tous, Elasticsearch est appelé ES, qui est basé sur un serveur de recherche basé sur Lucene. Il fournit un moteur de recherche en texte complet à capacité multi-utilisateurs distribuée basée sur l'interface Web RESTful. Elasticsearch est développé en Java et publié sous forme d'open source en vertu des termes de la licence Apache. Il s'agit actuellement d'un moteur de recherche populaire au niveau de l'entreprise. Conçu dans le cloud computing, il peut réaliser la recherche en temps réel, la stabilité, la fiabilité, rapidement et facile à installer et à utiliser.
Nous créons un site Web ou une application et ajoutons des fonctionnalités de recherche, mais il est très difficile de créer un travail de recherche. Nous avons une solution de recherche pour s'exécuter rapidement, nous voulons avoir une configuration zéro et un mode de recherche complètement gratuit, nous voulons pouvoir simplement utiliser JSON pour indexer les données sur HTTP, nous voulons que notre serveur de recherche soit toujours disponible, nous voulons être simples multi-locataires, nous voulons construire une solution cloud. Nous utilisons donc Elasticsearch pour résoudre tous ces problèmes et d'autres problèmes qui peuvent survenir.
Lorsque vous utilisez ES en Java, je veux juste résoudre le problème que la vitesse de requête n'est pas assez rapide et l'efficacité n'est pas assez élevée. La requête unique des données de la base de données ne peut plus répondre aux besoins de l'entreprise actuels. D'ACCORD! Alors, parlons maintenant de la façon d'utiliser le serveur de recherche magique d'ES en Java. Tout d'abord, vous devez référencer le package de dépendance ES, et les dépendances sont les suivantes:
<Dedency> <ProupId> org.ElasticSearch.Client </rom-GroupId> <ArtifACTID> Transport </ ArtifactId> <Dersion> 5.5.0 </ Version> </Dependency> <proupId> Org.Elasticsearch.Client </proupId> <prefactid> Transport </ artifactid> <version> 5.5.0 </DERNIFRODICATION> <dependency> <proupId> org.ElasticSearch </proupId> <ArtefactId> elasticsearch </letefactId> <version> 5.5.0 </ version> </Dependance>
OK, après avoir ajouté les dépendances, nous entrons dans l'étape d'utilisation ES. Soit dit en passant, il y a un problème qui doit être expliqué. Pour utiliser ES, vous devez installer la boîte à outils JDK1.8 et Tomcat doit être la version 7.05 ou supérieure, sinon ES ne sera pas pris en charge, et une erreur peut être signalée lors de l'intégration dans le projet! , il y a aussi l'installation et le téléchargement d'ES, voici l'adresse de téléchargement: https://www.ellastic.co/downloads/elasticsearch
Après que tout soit prêt, nous entrerons au moment où nous attendons vraiment avec impatience. Quoi, oui, comment rechercher et interroger les choses dans le serveur ES en Java, permettez-moi de les révéler un par un pour vous:
Tout d'abord, nous suggérons une classe d'outils ES
package com.osa.utils; import java.io.buffereDader; import java.io.ioException; import java.io.inputstreamreader; import java.io.printwriter; import java.net.url; import java.net.urlconnection; import java.net.urlencoder; import java.util.iter; java.util.list; importer java.util.map; import java.util.set; import org.apache.http.client.clientprotocolexception; import com.alibaba.fastjson.jsonArray; import com.alibaba.fastjson.jsonexception; import com.alibaba.fastjson.jsonObject; public class httts com.alibaba.fastjon.json.jsonObject; Public Class HtTpuls com.alibaba.fastjon. {/ ** * Envoyez une demande à l'URL spécifiée * * @param URL * URL Pour envoyer la demande * @param paramètres de la demande, les paramètres de demande doivent être dans le formulaire de name1 = value1 & name2 = value2. * @return URL Résultat Résultat de la ressource distante représentée par la ressource distante * / public static String sendGet (String URL, String Param) {String result = ""; BufferedReader dans = null; essayez {String urlNmestring = url + "?" + param; URL REALURL = NOUVELLE URL (URLNAMESTRING); // Ouvrez la connexion entre la connexion URL URLConnection = realUrl.OpenConnection (); // Définissez la connexion d'attribut de demande générale.SetRequestProperty ("accepter", "* / *"); connection.setRequestProperty ("connexion", "keep-alive"); connection.setRequestProperty ("User-Agent", "Mozilla / 4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)"); // Créer une connexion de connexion réelle.Connect (); // Obtenez tous les champs d'en-tête de réponse map <string, list <string >> map = connection.geTheaderFields (); // Traverse tous les champs d'en-tête de réponse pour (clé de chaîne: map.KeySet ()) {System.out.println (key + "--->" + map.get (key)); } // Définissez le flux d'entrée BufferedReader pour lire la réponse de l'URL dans = new BufferedReader (new InputStreamReader (connection.getInputStream ())); Ligne de chaîne; while ((line = in.readline ())! = null) {result + = line; }} catch (exception e) {System.out.println ("Exception s'est produite lors de l'envoi d'une demande de GET!" + E); e.printStackTrace (); } // Utiliser enfin le bloc pour fermer le flux d'entrée enfin {try {if (in! = Null) {in.close (); }} catch (exception e2) {e2.printStackTrace (); }} Retour Résultat; } / ** * Envoyez une demande à l'URL spécifiée * @param URL * URL pour envoyer la demande * @param paramètre param * de la demande, le paramètre de demande doit être dans le formulaire de name1 = value1 & name2 = value2. * @return Résultat Résultat de la ressource distante représentée par * / public static String sendPost (URL de chaîne, chaîne param) {printwriter out = null; BufferedReader dans = null; Résultat de chaîne = ""; essayez {url realUrl = new url (url); // Ouvrez la connexion entre UrlConnection Conn = realUrl.OpenConnection (); // Définissez l'attribut général de la demande Conn.SetRequestProperty ("accepter", "* / *"); Conn.SetRequestProperty ("Connexion", "Keep-Alive"); Conn.SetRequestProperty ("User-Agent", "Mozilla / 4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)"); // Pour envoyer une demande de poste, vous devez définir les deux lignes suivantes sur Conn.SetDoOutput (true); Conn.SetDoInput (true); // obtient le flux de sortie correspondant à l'objet UrlConnection OUT = new printwriter (conn.getOutputStream ()); // Envoyez le paramètre de demande Out.print (param); // tampon out.flush () du flux de sortie de flux; // Définissez le flux d'entrée BufferedReader pour lire la réponse de l'URL dans = new BufferedReader (new InputStreamReader (Conn.getInputStream ())); Ligne de chaîne; while ((line = in.readline ())! = null) {result + = line; }} catch (exception e) {System.out.println ("Exception s'est produite lors de l'envoi d'une demande post!" + E); e.printStackTrace (); } // Utiliser les blocs enfin pour fermer le flux de sortie et le flux d'entrée enfin {try {if (out! = Null) {out.close (); } if (in! = null) {in.close (); }} catch (ioException ex) {ex.printStackTrace (); }} Retour Résultat; }} Une fois la classe d'outils disponibles, vous pouvez voir qu'il existe deux méthodes pour envoyer des demandes, l'une est les méthodes SendGet et SendPost. Les deux méthodes peuvent être sélectionnées en fonction de leurs propres choix. Bien sûr, ce n'est qu'une méthode pour envoyer des demandes. Comment les appeler? Ici, puisque nous interrogeons d'ES, il n'est pas nécessaire d'utiliser des cadres MyBatis ou Hibernate. Vous pouvez définir SQL par vous-même dans la couche de données, puis utiliser SQL pour appeler la méthode SendGet / SendPost via la classe d'outils précédente, comme suit:
String sql = UrLencoder.Encode ("SELECT * FROM TABLE"); Encoder la méthode supprime principalement certains espaces dans SQL
String result = httpSENTUtils.sendGet ("http://221.124.71.8:9200/_sql", "sql =" + sql); Le port IP Plus peut être configuré lors de l'installation
D'ACCORD! Généralement, si l'envoi est réussi pour le moment, les données en ES peuvent être récupérées. Parce que les données JSON renvoyées dans ES, nous formons la chaîne JSON.
net.sf.json.jsonObject jsonObject = net.sf.json.jsonObject.FromObject (result); // retirer le hit tag net.sf.json.jsonObject HitsJSonObject = jsonObject.getjsonObject ("Hits"); Une fois les données obtenues, il est conclu qu'il s'agit d'opérations commerciales. C'est presque ici.
Ce qui précède sont quelques opérations de requête, alors que devons-nous faire si nous devons par laver les données d'insertion dans ES? Donner un exemple
package com.sojson.core.ellasticsearch.manager; import java.util.arraylist; import java.util.hashmap; import java.util.list; importer java.util.map; import net.sf.json.jsonObject; org.ellasticsearch.action.bulk.bulkresponse; import org.elasticsearch.action.index.indexrequestbuilder; import com.sojson.common.utils.stringutils; import com.sojson.core.ellasticsearch.utils.estools; publicclassinsertManageger {/ *** ajouter des données à ellasticsearch * @ param Type * @ param idname id Nom du champ * @ param JSON Le json stocké peut accepter la carte * @ return * / publicStaticMapsave (String index, String Type, String idName, JSONObject JSON) {list list = newArrayList ();} Les paramètres passés sont traités et appelés la méthode de sauvegarde pour effectuer l'opération d'insertion
/ *** Ajouter des données à elasticsearch * @ param index index * @ param type type * @ param idname id nom de champ * @ param listData une collection d'objets * @ return * / @ suppresswarnings ("Unchecked") publicStaticMapsave (String index, Type, String idname, list listData) {BulkrequestBuilder Bulkrequest = Esools.client.prepareBulk (). SetRefresh (true); map resultMap = newhashmap (); for (objet objet: listData) {jsonObject json = jsonObject.fromObject (objet); // aucun idname n'est spécifié, puis laissez Elasticsearch générer automatiquement. 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.PREPAREIDEX (INDEX, TYPE, IDVALUE) .SETSORCE (JSON); BulkRequest.Add (LRB);}} BulkResponse BulkResponse = BulkRequest.Execute (). ActionGet (); if (BulkResponse.Hasfailures ()) {// Processus Échecs en itérant via chaque réponse en vrac ItemSystem.out.println (BulkResponse.getItems (). resultMap;} bulkRequest = esools.client.preparebulk (); resultMap.put ("200", "Save es réussi!"); return resultMap;}} Classe d'outils elasticsearchutils
classe publique ElasticSearchUtils {private static final String cluster_name = "cluster.name"; chaîne finale statique privée es_ip = "es.ip"; chaîne finale statique privée es_port = "es.port"; Paramètres statiques privés; Client de transport statique privé; Settings = public staticClientClient GetSclient () lance UnonhostException {paramètres = public staticClientClient GetSclient () lance Unsexon Settings.builder (). Put (cluster_name, configUtils.getConfig (cluster_name)). Build (); if (client! = Null) {client = new InetsocketTransportClient (Settings) .AddTransportAddress (net InetsocketTransportAddress (inetaddress.getbyname (configUtils.getConfig (es_ip),) Integer.ParseInt (configUtils.getConfig (ES_Port))));} RETOUR Client;} Ce qui précède est l'opération ES d'insertion. D'accord, c'est tout pour le résumé d'aujourd'hui. J'espère que cela pourra vous apporter une petite aide, et j'espère que vous pourrez soutenir davantage Wulin.com.