Ambiente do sistema: CentOS 7.2 sob VM12
Versão atual instalada: Elasticsearch-2.4.0.tar.gz
Java Operação ES Etapas de cluster 1: Configurar informações do objeto de cluster; 2: Criar cliente; 3: Ver informações do cluster
1: Nome do cluster
O nome do cluster padrão é Elasticsearch. Se o nome do cluster for inconsistente com o especificado, um erro será relatado ao usar recursos do nó.
2: Função de farejo
Inicie a função Sniff através do cliente.Transport.sniff, para que você só precise especificar um nó no cluster (não necessariamente um nó principal) e, em seguida, carregue outros nós no cluster. Dessa forma, desde que o programa continue desligando, você ainda poderá se conectar a outros nós, mesmo que esse nó diminua.
3: Tipo de consulta searchtype.query_then_fetch
Existem 4 tipos de tipos de consulta na consulta ES
Query_and_fetch:
O nó mestre distribui a solicitação de consulta a todos os fragmentos. Cada fragmento é classificado e classificado de acordo com suas próprias regras de consulta, a saber, a frequência de frequência da palavra frequência e depois retorna o resultado ao nó principal. O nó mestre resume e classifica todos os dados e os retorna ao cliente. Este método requer apenas interação com ES uma vez.
Este método de consulta tem problemas com o volume de dados e a classificação. O nó principal resumirá os dados retornados por todos os fragmentos para que o volume de dados seja relativamente grande. Segundo, as regras em cada fragmento podem ser inconsistentes.
Query_then_fetch:
O nó mestre distribui a solicitação a todos os fragmentos. Depois que cada fragmento é classificado, o ID e a pontuação dos dados são retornados ao nó principal. Depois de recebê -lo, o nó mestre resume e classifica, e depois lê os dados correspondentes ao nó correspondente de acordo com o ID classificado e o retorna ao cliente. Este método requer interação com ES duas vezes.
Este método resolve o problema do volume de dados, mas o problema de classificação ainda existe e é o método de consulta padrão de ES
DEF_QUERY_AND_FETCH: e DFS_QUERY_THEN_FETCH:
Unificar as regras de cada fragmento para pontuar. Resolveu o problema de classificação, mas DFS_QUERY_AND_FETCH ainda tem problemas de volume de dados, DFS_QUERY_THEN_FETCH Ambos têm o melhor problema, mas a eficiência é a pior.
1. Obtenha o cliente, duas maneiras de obter
@Before public void antes () lança Exceção {map <string, string> map = new hashmap <string, string> (); map.put ("cluster.name", "elasticsearch_wenbronk"); Settings.Builder Settings = Settings.builder (). Put (map); client = transportclient.builder (). Configurações (configurações) .build () .addtransportAddress (new inetSockettransportAddress (inetaddress.getbyname ("www.wenbronk.com"), intoger.parseint ("9300"))); } @Fee Public void Antes11 () lança Exceção {// Crie o cliente, use o nome do cluster padrão, "Elasticsearch" // client = transportclient.builder (). Build () // .addtransportAddress (nenTetSockettransportAddress (inetaddress.getByName ("www.wenbronbronkn"; /Especifique as informações de configuração do cluster através do objeto de configuração e do nome do cluster configurado Configurações de configurações = Settings.SettingSbuilder (). Put ("cluster.name", "Elasticsearch_wenbronk") // defina o nome do cluster //. .put ("network.host", "192.168.50.37") .put ("client.transport.ignore_cluster_name", true) // ignora a verificação do nome do cluster e pode se conectar ao nome do cluster se o nome do cluster estiver incorreto após a abertura //. .put ("client.transport.ping_timeout", 5) // Relate um erro, tempo de espera de ping, .build (); cliente = transportclient.builder (). Configurações (configurações) .build () .addtransportAddress (new inetSockettransportAddress (new inetSocketAddress ("192.168.50.37", 9300)); // Padrão 5s // Quanto tempo leva para abrir a conexão, padrão 5S System.out.println ("SUCCESSO CONNECT"); }PS: Os dois métodos fornecidos pelo site oficial não podem ser usados, eles precisam ser combinados para usá -los e estou perdendo minha tarde ...
O significado de outros parâmetros:
Código:
pacote com.wenbronk.javaes; importar java.net.inetaddress; importar java.net.inetsocketaddress; importar java.util.date; importar java.util.hashmap; import java.util.list; import java.util.map; importar; org.ellasticsarch.action.bulk.backoffpolicy; importar org.elasticsearch.action.bulk.bulkprocessor; importar org.elticsarch.action.bulk.bulkprocessor.listener; import org.elasticsearch.action.bulk.bulk.bulkrestring; org.ellasticearch.action.bulk.bulkResponse; importação org.elasticsearch.action.delete.deleteRequest; importação org.elticsearch.action.delete.deleteresponse; importação org.elticsearch.action.getResponse; importemeSePearch.Action.Motaction.Multig.GetEstonseem; org.elticsearch.action.get.multigetResponse; importação org.elasticsearch.action.index.indexRequest; importação org.elticsearch.action.index.indexResponse; importação org.elticsearch.action.UpDate.UpDaterSponse; Immerg.ElticsEarc.Action.Uticseart.Umater; org.ellasticsearch.client.transport.TransportClient; importar org.elasticsearch.cluster.node.discoverynode; importar org.elticsearch.common.settings.setTransports; importicsicsic.ellasticsearch.common.transport.inetstestertAnSportAddress; org.ellasticsearch.common.unit.bytesizeValue; importar org.elasticsearch.common.unit.timeValue; importação org.elticsearch.common.xcontent.xcontentBuilder; importação org.elasticsearch.common.xcontent.xscrintFactory; importação; importação; org.junit.be antes; importar org.junit.test; importar com.alibaba.fastjson.jsonObject;/** * Use a API Java para operar o elasticsearch * * @author 231 * */public class Javaestest {private Transport Client; fonte de indexada privada; /*** Obtenha a conexão, a primeira maneira* @throws Exception* /// @Before public void antes () lança exceção {map <string, string> map = new hashmap <string, string> (); map.put ("cluster.name", "elasticsearch_wenbronk"); Settings.Builder Settings = Settings.builder (). Put (map); client = transportclient.builder (). Configurações (configurações) .build () .addtransportAddress (new inetSockettransportAddress (inetaddress.getbyname ("www.wenbronk.com"), intoger.parseint ("9300"))); }/ *** View Cluster Information*/ @Test public void testInfo () {list <DiscoveryNode> nós = client.connectedNodes (); for (DiscoveryNode Node: nós) {System.out.println (node.gethostAddress ()); }}/*** Organize Strings JSON, Método 1, Splicing diretamente*/public String createjson1 () {String json = "{" + "/" user/":/" Kimchy/"," + "/" Postdate/":/" 2013-01-30/"" "/" Message/"; retornar JSON; } / ** * Crie JSON com mapa * / public map <string, object> createjson2 () {map <string, object> json = new hashmap <string, object> (); json.put ("Usuário", "Kimchy"); json.put ("PostDate", new Date ()); json.put ("mensagem", "Experimentando o elasticsearch"); retornar JSON; } / *** Crie usando fastjson* / public jsonObject createjson3 () {jsonObject json = new jsonObject (); json.put ("Usuário", "Kimchy"); json.put ("PostDate", new Date ()); json.put ("mensagem", "Experimentando o elasticsearch"); retornar JSON; } / *** Use es Help Class* / public xContentBuilder createjson4 () lança exceção {// Crie o objeto JSON, uma das maneiras de criar JSON XCOntentBuilder fonte = xContentFactory.jsonbuilder () .startobject () .field ("user", "kimchy"). Elasticsearch ") .EndoBject (); fonte de retorno; } / *** Salvar no índice* @THOWSOWS Exceção* / @Test public void test1 () lança exceção {xContentBuilder fonte = createjson4 (); // armazenar json no índice Response Response = client.PrepareIndex ("Twitter", "Tweet", "1"). SetSource (fonte) .get (); // // o resultado é obtido string index = Response.getIndex (); String type = Response.getType (); String id = resposta.getId (); versão longa = resposta.getversion (); boolean criado = Response.IScreated (); System.out.println (index + ":" + type + ":" + id + ":" + versão + ":" + criado); }/ *** Obtenha a API Obtenha as informações do documento especificado*/ @Test public void testGet () {// getResponse Response = client.PrePareget ("Twitter", "Tweet", "1") // .get (); GetResponse Response = client.PrepareGet ("Twitter", "Tweet", "1") .SesetOperThread (false) // Thread Safe.get (); System.out.println (Response.getSourceasString ()); } / ** * Teste Excluir API * / @Test public void testDelete () {DeleteSponse Response = client.PreparedElete ("Twitter", "Tweet", "1") .get (); String index = Response.getIndex (); String type = Response.getType (); String id = resposta.getId (); versão longa = resposta.getversion (); System.out.println (index + ":" + type + ":" + id + ":" + versão); } / ** * ATUALIZAÇÃO DE ATUALIZAÇÃO DE TESTE API * Use UpdateRequest Object * @Throws Exception * / @Test public void testUpDate () lança exceção {updateRequest updateRequest = new UpdateRequest (); updateRequest.index ("Twitter"); updateRequest.type ("tweet"); updateRequest.id ("1"); updateRequest.doc (xContentFactory.jsonbuilder () .StarTObject () // Adicione campos que não existem, substitua os campos existentes.field ("gênero", "masculino") .field ("mensagem", "hello") .andObject ()); Resposta da UpdateSponse = client.Update (updateRequest) .get (); // Print String index = Response.getIndex (); String type = Response.getType (); String id = resposta.getId (); versão longa = resposta.getversion (); System.out.println (index + ":" + type + ":" + id + ":" + versão); }/** * Teste a API de atualização, use o cliente * @Trows Exception */@Test public void testUpDate2 () lança exceção {// Atualizado com o objeto de script // Atualizador Response = client.PreparUPDate ("Twitter", "Tweet", "1)/.SetScript (new Script", // Resposta de atualização de resposta = client.PrepareUpdate ("Twitter", "Tweet", "1") // .SetDoc (xContentFactory.jsonbuilder () // .startobject () //. // Use UpdateRequest Object and Script // UpdateRequest updateRequest = new UpdateRequest ("Twitter", "Tweet", "1") // .Script (new Script ("ctx._source.gender =/" masculino/""); // ATUALIZAÇÃO RESPOSTA DE ATUALIZAÇÃO = CLIENT.UPDATE (UpdateRequest) .get (); // ATUALIZAÇÃO RESPOSTA DE RESPONSÃO = CLIENTE.UPDATE (NOVA UPDATEREQUEST ("Twitter", "Tweet", "1") .doc (xContentFactory.jsonbuilder () .startobject () .field ("gênero", "masculino") .andObject ()). Get (); System.out.println (Response.getIndex ()); }/** * Atualização de teste * Use UpdateRequest * @Throws Exception * @Throws InterruptEdException */@Test public void testUpDate3 () lança interruptEdException, exceção {updateRequest updateRequest = new UpdateRequest ("Twitter", "tweet", "1") .script (script " Resposta da UpdateSponse = client.Update (updateRequest) .get (); } / ** * Test UpSert Method * @THOLS Exception * * / @Test public void testUpSert () lança Exceção {// Defina as condições de consulta, adicione o indexEquest eficaz indexRequest = new IndexRequest ("Twitter", "Tweet", "2") .Source (XContentFactory.Json ", (" Tweet "," 2 ". .field ("gênero", "gfreq") .ndObject ()); // Defina atualização, encontre as configurações de atualização abaixo do updateRequest upSert = new UpdateRequest ("Twitter", "Tweet", "2") .doc (xContentFactory.jsonbuilder () .startobject () .field ("user", "wenbronk") .ndOnDOnBject () .UPSTERT (index -sequest); client.Update (upsert) .get (); } /** * Test multi get api * Get from different index, type, and id */ @Test public void testMultiGet() { MultiGetResponse multiGetResponse = client.prepareMultiGet() .add("twitter", "tweet", "1") .add("twitter", "tweet", "2", "3", "4") .add("anothoer", "type", "Foo") .get (); for (multigetiTemResponse itemResponse: multiGeTResponse) {getResponse Response = itemResponse.getResponse (); if (Response.sexists ()) {String sourceasString = Response.getSourceasString (); System.out.println (SourceasString); }}} / *** Execução em lote em massa* Uma consulta pode ser atualizada ou excluir vários documentos* / @Test public void testBulk () lança exceção {BulkRequestBuilder BulkRequest = client.PrepareBulk (); BulkRequest.add (client.PrepareIndex ("Twitter", "Tweet", "1") .SetSource (xContentFactory.jsonbuilder () .startoBject () .field ("user", "kimchy") .field ("postDate", new Date () .field ("" "" ""). BulkRequest.add (client.PrepareIndex ("Twitter", "Tweet", "2") .SetSource (xContentFactory.jsonbuilder () .startoBject () .field ("user"; Resposta da BulkResponse = BulkRequest.get (); System.out.println (Response.gEtheaders ()); } /** * Use bulk processor * @throws Exception */ @Test public void testBulkProcessor() throws Exception { // Create BulkPorcessor objectBulkProcessor bulkProcessor = BulkProcessor.builder(client, new Listener() { public void beforeBulk(long paramLong, BulkRequest paramBulkRequest) { // TODO Método gerado automaticamente stub} // Executa o pós-barro público de vazio (parambulkRequest, parambulkrequest, arkamlong, arkamilizável) {// TODO Método Auto-Generado) STUB} Public Void Afterbulk (ParamLong Long, parâmetros de devolução), que BulkrenkSoSSoSonsOnsonsOnsonsopeOnsOnsonsonsonsonsonsonsonsonsonsonsonsonsonsonsonsonsonsonsonsonsonsonsensonsonsonsonsewroth) }}) // solicitações 1W para executar a granel .SetBulkactions (10000) // 1 GB de dados Atualize a granel .SetBulksize (novo ByTesizeValue (1, ByTesizeUnit.gb) // Fixado 5s deve ser atualizado uma vez.setflushinterval (timevalue.valueSents) (5s) deve ser atualizado. execute simultaneamente.SetCurrentRequests (1) // Volte, execute após 100ms, máximo 3 solicitações.setbackoffpolicy (backoffpolicy.exponencialbackoff (timeValue.timeValuemillis (100), 3)) .build (); // Adicione uma única solicitação BulkProcessor.add (new IndexRequest ("Twitter", "Tweet", "1")); BulkProcessor.add (New Deleterequest ("Twitter", "Tweet", "2")); // Fechar a BulkProcessor.awaitclose (10, timeUnit.Minutes); // ou BulkProcessor.close (); }} Código TES2:
pacote com.wenbronk.javaes; importar java.net.inetsocketaddress; importar org.apache.lucene.queryparser.xml.filterbuilderFactory; importação org.elticsearch.action.search.multisearchResponse; importação.EssicSearch.Action.Search.Search.Mearch.MearchResponse; importação.EssicaHearch.Action.Search.Search.Mearch.MearchResponse; importação.Elticsearch.Action.Search.search.search.MearchResponse; org.elticsearch.action.search.searchResponse; importação org.elticsearch.action.search.searchtype; importação org.elticsearch.client.transport.transportClient; importação org.elticsearch.common.mettings.Settings; importação org.Elticsearch.commonSearch.common.Settings.Settings; org.elticsearch.common.transport.iNetSocketTransportAddress; importar org.elasticsearch.common.unit.timeValue; importar org.elasticsearch.index.QueryItherbuilder; import org.elasticsearch.indexery.QueryEarch.QueryHerildersicsics; org.elticsearch.search.agregations.agregation; importação org.elasticsearch.search.agregations.agregations.agregationsBuilders; import org.elasticsarch.search.agregations.bucket.histogram.datehistogrogramVal; importação org.elticsearch.search.search.search.search.Search.Search.Search.Search.Search.Search.Search.Searth.DateHistogrogramv; org.elticsearch.search.sort.sortParseElement; importar org.junit.before; importar org.junit.test;/** * use a API java para operar elasticsearch * pesquisa api * @author 231 * */public classe javaestest2 {cliente de transporte privado; / *** Obtenha objeto do cliente*/ @Before public void testBefore () {Builder Builder = Settings.SettingSbuilder (); construtor.put ("cluster.name", "wenbronk_escluster"); // .put ("client.transport.ignore_cluster_name", true); Configurações Configurações = Builder.Build (); org.elticticsearch.client.Transport.TransportClient.Builder TransportBuild = TransportClient.Build (); Transportclient client1 = transportbuild.settings (configurações) .build (); client = client1.addtransportAddress ((newsockettransportAddress (new inetSocketAddress ("192.168.50.37", 9300)))); System.out.println ("SUCCESSA CONNECT TO ESCLUSTER"); }/*** Query de teste*/@Test public void testSearch () {// SearchRequestBuilder SearchRequestBuilder = client.Preparesearch ("Twitter", "Tweet", "1"); // searchResponse Response = SearchRequestBuilder.Settypes ("Type1", "tipo2") .SetSearchType (SearchType.DFS_QUERY_THEN_FETCH) // .SETQUERY (QueryBuilders.termQuery ("User", "Test") // .setPostFilter (QueryBuilders.RangeQuery ("Age"). de (0). .Execute (). ActionGet (); SearchResponse Response = client.Preparesearch () .Execute (). ActionGet (); // Searchhits hits = Response.gethits (); // para (SearchHit SearchHit: hits) {// for (ITERTOR (Searchhitfield> iteator = Searchhit (); Iterator.hasnext (); System.out.println (next.getValues ()); //} //} System.out.println (resposta); } / *** Teste API Scroll* Processamento mais eficiente de grandes quantidades de dados* / @Test public void testScrolls () {QueryBuilder QueryBuilder = querybuilders.termQuery ("Twitter", "Tweet"); Resposta da SearchResponse = client.preparesearch ("twitter") .addsort (sortparseelement.doc_field_name, Sortorder.asc) .SetScroll (new TimeValue (60000). while (true) {for (searchhit hit: Response.gethits (). } SearchResponse Respons2 = client.PreparesearchScroll (Response.getScrollid ()) .SetSCroll (new TimeValue (60000)). Execute (). Actionget (); if (Response2.gethits (). quebrar; }}} / ** * Teste multiSearch * / @Test public void testMultISECH () {QueryBuilder qb1 = querybuilders.QueryStringQuery ("Elasticsearch"); SearchRequestBuilder requestBuilder1 = client.Preparesearch (). SetQuery (QB1) .SetSize (1); Querybuilder qb2 = querybuilders.matchQuery ("usuário", "kimchy"); SearchRequestBuilder requestBuilder2 = client.Preparesearch (). SetQuery (QB2) .SetSize (1); MultiSearchResponse multiresponse = client.PreparemultEsearch (). Add (requestBuilder1) .add (requestBuilder2) .execute (). ActionGet (); nbhits longos = 0; for (multisearchResponse.item Item: multiresponse.getResponse ()) {pesquisa de pesquisa resposta = item.getResponse (); nbhits = Response.gethits (). getTotalhits (); SearchHit [] hits = Response.gethits (). Gethits (); System.out.println (nbhits); }} / *** Consulta de agregação de teste* / @Test public void testAgregation () {pesquisa de resposta a responsabilidade = client.Preparesearch () .SetQuery (querybuilders.matchAllQuery ()) // primeiro use a consulta para filtrar uma parte da parte.Adggregation (AGGREGYBERS.MERS.TERS.TERS (AGREGADA) () // Use a consulta para filtrar uma parte da parte. .Addagregation (agregationBuilders.dateHistogram ("agg2"). campo ("nascimento") .interval (dateHistogrograminterval.year)) .Execute (). actionget (); Agregação agregação2 = resposta.getAggregations (). Get ("termo"); Agregação de agregação = resposta.getAggregations (). Get ("agg2"); // searchResponse resposta2 = client.search (new SearchRequest (). SearchType (SearchType.Query_and_Fetch)). Actionget (); } / * * if (Response.isterMinedearly ()) {System.out.println ("Ternimate"); }} /** * Consulta de filtro: maior que GT, menor que LT, menor ou igual a LTE, maior ou igual a gte * /@test public void testFilter () {searchResponse Response = client.preparesearch ("twitter") .Settypes ("). .SetSearchType (SearchType.Query_Then_Fetch) // .SetPostFilter (filtroBuilders.RangeFilter ("Age"). De (0) .to (19) // .includelower (true) .includeUper (true)) /. .RangeFilter ("Age"). GTE (18) .lte (22)) .Setexplain (true) // Explique é verdadeiro para indicar que a classificação é classificada de acordo com a relevância dos dados, e a palavra -chave mais alta correspondente está na frente.get (); } / *** consulta do grupo* / @Test public void testGroupby () {client.Preparesearch ("twitter"). Settypes ("tweet") .setQuery (querybuilders.matchAllQuery () .SetsearchType (AGRETYPE.QUERYBETION_STHILD). .Field ("Usuário"). Tamanho (0) // Grupo de acordo com o usuário // tamanho (0) também é 10) .get (); }}O exposto acima é todo o conteúdo deste artigo. Espero que seja útil para o aprendizado de todos e espero que todos apoiem mais o wulin.com.