Como todos sabemos, o Elasticsearch é referido como ES, que é baseado em um servidor de pesquisa baseado no Lucene. Ele fornece um mecanismo de pesquisa de texto completo de vários usuários distribuídos com base na interface da Web RESTful. O Elasticsearch é desenvolvido em Java e lançado como um código aberto nos termos da licença Apache. Atualmente, é um mecanismo de pesquisa popular em nível empresarial. Projetado em computação em nuvem, ele pode obter pesquisa em tempo real, estabilidade, confiabilidade, rápido e fácil de instalar e usar.
Construímos um site ou aplicativo e adicionamos funcionalidade de pesquisa, mas é muito difícil criar um trabalho de pesquisa. Queremos que a solução de pesquisa seja executada rápida, queremos ter uma configuração zero e um modo de pesquisa completamente gratuito, queremos poder simplesmente usar o JSON para indexar dados sobre o HTTP, queremos que nosso servidor de pesquisa esteja sempre disponível, queremos ser capazes de começar de uma vez e escalar para centenas, queremos pesquisar em tempo real, queremos ser simples, que desejemos, que desejemos uma solução para a base. Por isso, usamos o Elasticsearch para resolver todos esses problemas e mais outros problemas que podem surgir.
Ao usar o ES em Java, só quero resolver o problema de que a velocidade da consulta não é rápida o suficiente e a eficiência não é alta o suficiente. A consulta única de dados do banco de dados não pode mais atender às necessidades de negócios atuais. OK! Então agora vamos falar sobre como usar o servidor de pesquisa mágica do ES em Java. Primeiro de tudo, você deve fazer referência ao pacote de dependência ES, e as dependências são as seguintes:
<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> <Depencency> <PuerpId> org.elasticsearch </frupiD> <stifactId> ElasticSearch </ArtifactId> <versão> 5.5.0 </sipers> </dependency>
OK, depois de adicionar as dependências, entramos no estágio de uso do ES. A propósito, há um problema que precisa ser explicado. Para usar o ES, você precisa instalar o JDK1.8 Toolkit e o TomCat devem ser a versão 7.05 ou acima, caso contrário, o ES não será suportado e um erro poderá ser relatado ao integrar o projeto! , Também há instalação e download de es, aqui está o endereço de download: https://www.elastic.co/downloads/elasticsarcharch
Depois que tudo estiver pronto, entraremos no momento em que realmente esperamos. O que, sim, como pesquisar e consultar as coisas no servidor ES em Java, deixe -me revelá -las uma a uma para você:
Primeiro, sugerimos uma classe de ferramentas es
pacote com.osa.utils; importar java.io.bufferedReader; importar java.io.ioException; importar java.io.inputStreamReader; importar java.io.printwriter; import java.net.url; import java.net.urlanção; java.util.list; importar java.util.map; importar java.util.set; importar org.apache.http.client.clientprotocolexception; import com.alibaba.fastjson.jsonArray; import.alibaba.fastjson.jSonexception; import.Aliba; {/** * Envie uma solicitação para o url especificado * * @param url * url para enviar a solicitação * @param param * parâmetros de solicitação, os parâmetros de solicitação devem estar na forma de nome1 = value1 & name2 = value2. * @return URL Resultado do recurso remoto representado pelo recurso remoto*/ public static string sendget (string url, string param) {string result = ""; BufferredReader in = null; tente {string urlnamestring = url + "?" + param; Url realurl = novo url (urlnamestring); // Abra a conexão entre a conexão de URLConnection URL = realUrl.Openconnection (); // Defina o atributo de solicitação geral Connection.SetRequestProperty ("aceitar", "*/*"); Connection.SetRequestProperty ("Connection", "Keep-Alive"); Connection.setRequestProperty ("User-Agent", "Mozilla/4.0 (compatível; MSIE 6.0; Windows NT 5.1; Sv1)"); // Crie uma conexão de conexão real.connect (); // Obtenha todos os campos de cabeçalho de resposta mapa <string, list <string>> map = Connection.getheadeRFields (); // Atravesse todos os campos de cabeçalho de resposta para (chave de string: map.keyyset ()) {System.out.println (key + "--->" + map.get (key)); } // Defina o fluxo de entrada do BufferErader para ler a resposta do URL em = new BufferredReader (new InputStreamReader (Connection.getInputStream ())); Linha de string; while ((line = in.readline ())! = null) {resultado += line; }} Catch (Exceção e) {System.out.println ("Exceção ocorreu ao enviar uma solicitação GET!" + E); E.PrintStackTrace (); } // Use finalmente bloco para fechar o fluxo de entrada finalmente {tente {if (in! = Null) {in.close (); }} Catch (Exceção E2) {E2.PrintStackTrace (); }} Retornar resultado; } /** * Envie uma solicitação para o URL especificado * @param url * url para enviar a solicitação * @param param * parâmetro de solicitação, o parâmetro de solicitação deve estar na forma de nome1 = value1 & name2 = value2. * @return Resposta Resultado do recurso remoto representado por */ public static string sendPost (String url, string param) {printWriter out = null; BufferredReader in = null; String result = ""; tente {url realurl = novo url (url); // Abra a conexão entre urlConnection Conn = realUrl.Openconnection (); // Defina o atributo de solicitação geral Conn.SetRequestProperty ("Aceitar", "*/*"); Conn.SetRequestProperty ("Connection", "Keep-Alive"); Conn.SetRequestProperty ("User-Agent", "Mozilla/4.0 (compatível; MSIE 6.0; Windows NT 5.1; Sv1)"); // Para enviar uma solicitação de postagem, você deve definir as duas linhas a seguir para Conn.SetDoOutput (true); Conn.SetDoinput (true); // Obtenha o fluxo de saída correspondente ao objeto URLConnection out = new PrintWriter (Conn.getOutputStream ()); // Envie o parâmetro de solicitação para fora.print (param); // buffer out.flush () do fluxo de saída de descarga; // Defina o fluxo de entrada do BufferErader para ler a resposta do URL em = new BufferredReader (new InputStreamReader (Conn.getInputStream ())); Linha de string; while ((line = in.readline ())! = null) {resultado += line; }} catch (Exceção e) {System.out.println ("Exceção ocorreu ao enviar uma solicitação de postagem!" +e); E.PrintStackTrace (); } // Use finalmente blocos para fechar o fluxo de saída e o fluxo de entrada finalmente {tente {if (out! = Null) {out.close (); } if (in! = null) {in.close (); }} catch (ioexception ex) {ex.printStackTrace (); }} Retornar resultado; }} Depois que a classe de ferramentas estiver disponível, você pode ver que existem dois métodos para enviar solicitações, um é o sendget e o sendPost métodos. Os dois métodos podem ser selecionados com base em suas próprias escolhas. Obviamente, este é apenas um método para enviar solicitações. Como chamá -los? Aqui, como estamos consultando o ES, não há necessidade de usar estruturas Mybatis ou Hibernate. Você pode definir o SQL sozinho na camada de dados e, em seguida, usar o SQL para chamar o método Sendget/SendPost através da classe de ferramentas anterior, como segue:
String sql = urlencoder.encode ("Selecione * da tabela"); o método Encode remove principalmente alguns espaços no SQL
String resultado = httpsentutils.sendget ("http://221.124.71.8:9200/_sql", "sql ="+sql); A porta IP Plus pode ser configurada ao instalar
OK! Geralmente, se o envio for bem -sucedido neste momento, os dados no ES podem ser recuperados. Como os dados JSON retornados no ES, formatamos a string json.
net.sf.json.jsonObject jsonObject = net.sf.json.jsonObject.FromObject (resultado); // retire os hits tag net.sf.json.jsonObject hitsjsonObject = jsonObject.getjsonObject ("hits"); Depois que os dados são obtidos, conclui -se que são operações comerciais. Está quase aqui.
O exposto acima são algumas operações de consulta; portanto, o que devemos fazer se precisarmos inserir dados em lote em ES? Dê um exemplo
pacote com.sojson.core.elticsearch.manager; importar java.util.arraylist; importar java.util.hashmap; importar java.util.list; importar java.util.map; import.sf.json.jsonbject; importação org.lasticsechart.map; org.elasticsearch.action.bulk.bulkResponse; importar org.elasticsearch.action.index.indexRequestBuilder; importar com.sojson.common.utils.stringUtils; IdName Id Nome do campo*@param json O json armazenado pode aceitar mapa*@return*/publicstaticMapsAve (string index, string tipo, string idname, jsonObject json) {list list = newArrayList (); list.add (json); retornar salvar (índice, tipo, idname, list);} Os parâmetros passados são processados e chamados de método de salvamento para executar a operação de inserção
/*** Adicione dados ao elasticsearch*@param Índice*@param Tipo Tipo*@param IdName Id Nome do campo*@param listData Uma coleção de objetos*@return*/@supressão = Estools.client.PrepareBulk (). SetRefresh (true); map resultmap = newhashmap (); para (objeto objeto: listData) {jsonObject json = jsonObject.FromObject (object); // sem idname é especificado, então deixe a elasticse pesquisar automaticamente gerar automaticamente. If (stringUtils.isblank (idname)) {indexRequestBuilder lrb = elasticsearchutils.client .PrepareIndex (index, tipo) .SetSource (json); BulkReQuest.add (lrb); // ElastSearchutils} JSON.OPTSTRING (IDNAME); IndexRequestBuilder lrb = Esteols.client.PrepareIndex (Index, Type, IdValue) .SetSource (JSON); BulkRequest.add (LRB);}} BulkResponse BulkResponse = BulkRequest.execute (). ActionGet (); if (BulkResponse.hasFailures ()) {// Processam falhas iterando através de cada resposta em massa itemsystem.out.println (BulkResponse.getItems (). ResultMap;} BulkRequest = Esteols.client.PrepareBulk (); ResultMap.put ("200", "Save es bem -sucedido!"); Return ResultMap;}} Elasticsearchutils Ferramentas de ferramentas
classe pública Elasticsearchutils {private estático final string cluster_name = "cluster.name"; string final estática privada es_ip = "es.ip"; private static final string es_port = "es.port"; configurações estáticas privadas; Settings.builder (). Put (cluster_name, configutils.getconfig (cluster_name)). Build (); if (client! = Null) {client = new prebuiltTransportClient (Settings) .AddTransportAddress (newetSocketLetRAdLressLress (inetdDr). Integer.parseint (configutils.getconfig (es_port))));} retornar cliente;} O exposto acima é a operação de inserção es. Ok, isso é tudo para o resumo de hoje. Espero que isso possa lhe trazer uma pequena ajuda e espero que você possa apoiar mais o wulin.com.