ElasticSearch API在Java中的增删改查

 一、引入ES客户端依赖

      <!--elsaticsearch的客户端-->
      <dependency>
          <groupId>org.elasticsearch.client</groupId>
          <artifactId>transport</artifactId>
          <version>6.5.4</version>
      </dependency>

二、各种增删改查

package com.elastic;



import com.sun.xml.internal.ws.client.ClientTransportException;
import org.apache.lucene.index.Term;
import org.elasticsearch.action.admin.cluster.health.ClusterHealthRequest;
import org.elasticsearch.action.admin.cluster.health.ClusterHealthResponse;
import org.elasticsearch.action.bulk.BulkRequestBuilder;
import org.elasticsearch.action.bulk.BulkResponse;
import org.elasticsearch.action.delete.DeleteResponse;
import org.elasticsearch.action.get.GetResponse;
import org.elasticsearch.action.get.MultiGetItemResponse;
import org.elasticsearch.action.get.MultiGetResponse;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.index.IndexResponse;
import org.elasticsearch.action.search.SearchRequestBuilder;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.action.update.UpdateRequest;
import org.elasticsearch.action.update.UpdateResponse;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.cluster.health.ClusterHealthStatus;
import org.elasticsearch.cluster.health.ClusterIndexHealth;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.TransportAddress;
import org.elasticsearch.common.xcontent.XContentBuilder;
import org.elasticsearch.common.xcontent.XContentFactory;
import org.elasticsearch.index.query.QueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.index.reindex.BulkByScrollResponse;
import org.elasticsearch.index.reindex.DeleteByQueryAction;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHits;
import org.elasticsearch.search.aggregations.Aggregation;
import org.elasticsearch.search.aggregations.AggregationBuilder;
import org.elasticsearch.search.aggregations.AggregationBuilders;
import org.elasticsearch.search.aggregations.bucket.filter.Filter;
import org.elasticsearch.search.aggregations.bucket.filter.Filters;
import org.elasticsearch.search.aggregations.bucket.filter.FiltersAggregator;
import org.elasticsearch.search.aggregations.bucket.missing.Missing;
import org.elasticsearch.search.aggregations.bucket.range.Range;
import org.elasticsearch.search.aggregations.bucket.terms.Terms;
import org.elasticsearch.search.aggregations.metrics.avg.Avg;
import org.elasticsearch.search.aggregations.metrics.cardinality.Cardinality;
import org.elasticsearch.search.aggregations.metrics.max.Max;
import org.elasticsearch.search.aggregations.metrics.min.Min;
import org.elasticsearch.search.aggregations.metrics.sum.Sum;
import org.elasticsearch.transport.client.PreBuiltTransportClient;
import org.junit.Test;

import java.io.IOException;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.nio.channels.ReadPendingException;
import java.util.Map;
import java.util.concurrent.ExecutionException;


public class ESTest {
    //查询数据
    @Test
    public void test1() throws UnknownHostException {
        //指定ES集群
        Settings settings= Settings.builder().put("cluster.name","my-application").build();
        //创建访问es服务器的客户端
        /*
            InetAddress.getByName("192.168.184.133")
            输出结果为:
            /192.168.184.133
         */
        TransportClient client=new PreBuiltTransportClient(settings)
                .addTransportAddresses(new TransportAddress[]{
                        new TransportAddress(InetAddress.getByName("192.168.184.133"),9300),
                        new TransportAddress(InetAddress.getByName("192.168.184.135"),9300),
                        new TransportAddress(InetAddress.getByName("192.168.184.136"),9300)
                });
        //数据查询
        GetResponse response=client.prepareGet("index","user","1").execute().actionGet();
        //得到查询中的数据
        System.out.println(response.getSourceAsString());

        //关闭客户端
        client.close();
    }

    //添加文档
    @Test
    public void test2() throws IOException {
        Settings settings= Settings.builder().put("cluster.name","my-application").build();
        TransportClient client=new PreBuiltTransportClient(settings)
                .addTransportAddresses(new TransportAddress[]{
                        new TransportAddress(InetAddress.getByName("192.168.184.133"),9300),
                        new TransportAddress(InetAddress.getByName("192.168.184.135"),9300),
                        new TransportAddress(InetAddress.getByName("192.168.184.136"),9300)
                });


        XContentBuilder doc= XContentFactory.jsonBuilder().startObject().
                field("id","2").
                field("title","java设计模式").
                field("postdate","2019-01-01").
                field("url","www.csdn.com").endObject();
        //文档的id,如果为null,则由es生成,如果指定就用指定的
        IndexResponse response=client.prepareIndex("index_idea","blog","2").setSource(doc).get();

        System.out.println(response.status());


        client.close();
    }

    //删除文档
    @Test
    public void test3() throws UnknownHostException {
        Settings settings= Settings.builder().put("cluster.name","my-application").build();
        TransportClient client=new PreBuiltTransportClient(settings)
                .addTransportAddresses(new TransportAddress[]{
                        new TransportAddress(InetAddress.getByName("192.168.184.133"),9300),
                        new TransportAddress(InetAddress.getByName("192.168.184.135"),9300),
                        new TransportAddress(InetAddress.getByName("192.168.184.136"),9300)
                });
        DeleteResponse  response= client.prepareDelete("index_idea","blog","2").get();

        System.out.println(response.status());
        client.close();
    }

    //post方式的更新,只更部分字段,更新文档
    @Test
    public void test4() throws IOException, ExecutionException, InterruptedException {
        Settings settings= Settings.builder().put("cluster.name","my-application").build();
        TransportClient client=new PreBuiltTransportClient(settings)
                .addTransportAddresses(new TransportAddress[]{
                        new TransportAddress(InetAddress.getByName("192.168.184.133"),9300),
                        new TransportAddress(InetAddress.getByName("192.168.184.135"),9300),
                        new TransportAddress(InetAddress.getByName("192.168.184.136"),9300)
                });
        UpdateRequest request=new UpdateRequest();
        request.index("index_idea").type("blog").id("2")
                .doc(
                        XContentFactory.jsonBuilder().startObject()
                                .field("title","JAVA设计模式之单例模式")
                                .endObject()
                );
        UpdateResponse response=client.update(request).get();
        System.out.println(response);
        client.close();
    }

    //upsert更新,这种方式如果文档存在就更新,如果文档不存在就添加文档
    @Test
    public void test5() throws IOException, ExecutionException, InterruptedException {
        Settings settings= Settings.builder().put("cluster.name","my-application").build();
        TransportClient client=new PreBuiltTransportClient(settings)
                .addTransportAddresses(new TransportAddress[]{
                        new TransportAddress(InetAddress.getByName("192.168.184.133"),9300),
                        new TransportAddress(InetAddress.getByName("192.168.184.135"),9300),
                        new TransportAddress(InetAddress.getByName("192.168.184.136"),9300)
                });
        //添加文档
        IndexRequest request=new IndexRequest("index_idea","blog","3").source(
                XContentFactory.jsonBuilder().startObject().
                        field("id","2").
                        field("title","java设计模式之工厂模式").
                        field("postdate","2019-01-01").
                        field("url","www.csdn.com")
                        .endObject()
        );

        //修改
        UpdateRequest request2=new UpdateRequest();
        request2.index("index_idea").type("blog").id("10")
                .doc(
                        XContentFactory.jsonBuilder().startObject()
                                .field("title","JAVA设计模式!!!!")
                                .endObject()
                ).upsert(request);

        UpdateResponse response=client.update(request2).get();
        System.out.println(response);


        client.close();
    }

    //mget
    @Test
    public void test6() throws IOException, ExecutionException, InterruptedException {
        Settings settings= Settings.builder().put("cluster.name","my-application").build();
        TransportClient client=new PreBuiltTransportClient(settings)
                .addTransportAddresses(new TransportAddress[]{
                        new TransportAddress(InetAddress.getByName("192.168.184.133"),9300),
                        new TransportAddress(InetAddress.getByName("192.168.184.135"),9300),
                        new TransportAddress(InetAddress.getByName("192.168.184.136"),9300)
                });
        MultiGetResponse responses=client.prepareMultiGet()
                .add("index_idea","blog","1")
                .add("index_idea","blog","2").get();

        for (MultiGetItemResponse item:responses){
            GetResponse gr=item.getResponse();
            if(gr!=null &&gr.isExists()){
                System.out.println(gr.getSourceAsString());
            }

        }
        client.close();
    }

    //bulk批量增删改操作
    @Test
    public void test7() throws IOException, ExecutionException, InterruptedException {
        Settings settings= Settings.builder().put("cluster.name","my-application").build();
        TransportClient client=new PreBuiltTransportClient(settings)
                .addTransportAddresses(new TransportAddress[]{
                        new TransportAddress(InetAddress.getByName("192.168.184.133"),9300),
                        new TransportAddress(InetAddress.getByName("192.168.184.135"),9300),
                        new TransportAddress(InetAddress.getByName("192.168.184.136"),9300)
                });
        BulkRequestBuilder bulkRequestBuilder=client.prepareBulk();

        //批量添加
        bulkRequestBuilder.add(
                client.prepareIndex("index_idea","blog","11").setSource(
                        XContentFactory.jsonBuilder().startObject().
                                field("id","11").
                                field("title","java设计模式之工厂模式---11").
                                field("postdate","2019-01-01").
                                field("url","www.csdn.com")
                                .endObject()
                )
        );

        bulkRequestBuilder.add(
                client.prepareIndex("index_idea","blog","12").setSource(
                        XContentFactory.jsonBuilder().startObject().
                                field("id","11").
                                field("title","java设计模式之工厂模式---12").
                                field("postdate","2019-01-01").
                                field("url","www.csdn.com")
                                .endObject()
                )
        );

        BulkResponse responses=bulkRequestBuilder.get();
        System.out.println(responses.status());
        if(responses.hasFailures()){
            System.out.println("失败了");
        }

        client.close();
    }

    //查询删除
    @Test
    public void test8() throws IOException, ExecutionException, InterruptedException {
        Settings settings= Settings.builder().put("cluster.name","my-application").build();
        TransportClient client=new PreBuiltTransportClient(settings)
                .addTransportAddresses(new TransportAddress[]{
                        new TransportAddress(InetAddress.getByName("192.168.184.133"),9300),
                        new TransportAddress(InetAddress.getByName("192.168.184.135"),9300),
                        new TransportAddress(InetAddress.getByName("192.168.184.136"),9300)
                });
        BulkByScrollResponse response= DeleteByQueryAction.INSTANCE
                .newRequestBuilder(client)
                .filter(QueryBuilders.matchQuery("title","11"))
                .source("index_idea")
                .get();
        long counts = response.getDeleted();
        System.out.println(counts);


        client.close();
    }

    //match_all,查询所有
    @Test
    public void test9() throws UnknownHostException {
        Settings settings= Settings.builder().put("cluster.name","my-application").build();
        TransportClient client=new PreBuiltTransportClient(settings)
                .addTransportAddresses(new TransportAddress[]{
                        new TransportAddress(InetAddress.getByName("192.168.184.133"),9300),
                        new TransportAddress(InetAddress.getByName("192.168.184.135"),9300),
                        new TransportAddress(InetAddress.getByName("192.168.184.136"),9300)
                });
        QueryBuilder queryBuilder=QueryBuilders.matchAllQuery();


        //默认是查10条
        SearchResponse response=client.prepareSearch("index_idea")
                .setQuery(queryBuilder).setSize(3).get();

        SearchHits hits=response.getHits();
        for (SearchHit hit:hits){
            System.out.println(hit.getSourceAsString());
            Map<String, Object> sourceAsMap = hit.getSourceAsMap();
            for (String key: sourceAsMap.keySet()){
                System.out.println(key+"-->"+sourceAsMap.get(key));
            }
        }

        client.close();
    }

    //match query
    @Test
    public void test10() throws UnknownHostException {
        Settings settings= Settings.builder().put("cluster.name","my-application").build();
        TransportClient client=new PreBuiltTransportClient(settings)
                .addTransportAddresses(new TransportAddress[]{
                        new TransportAddress(InetAddress.getByName("192.168.184.133"),9300),
                        new TransportAddress(InetAddress.getByName("192.168.184.135"),9300),
                        new TransportAddress(InetAddress.getByName("192.168.184.136"),9300)
                });
        QueryBuilder queryBuilder=QueryBuilders.matchQuery("title","JAVA");

        //setSize设置每次查询多少条文档
        SearchResponse response=client.prepareSearch("index_idea")
                .setQuery(queryBuilder).setSize(3).get();

        SearchHits hits=response.getHits();
        for (SearchHit hit:hits){
            System.out.println(hit.getSourceAsString());
            Map<String, Object> sourceAsMap = hit.getSourceAsMap();
            for (String key: sourceAsMap.keySet()){
                System.out.println(key+"-->"+sourceAsMap.get(key));
            }
        }

        client.close();
    }

    //multiMatch query
    @Test
    public void test11() throws UnknownHostException {
        Settings settings= Settings.builder().put("cluster.name","my-application").build();
        TransportClient client=new PreBuiltTransportClient(settings)
                .addTransportAddresses(new TransportAddress[]{
                        new TransportAddress(InetAddress.getByName("192.168.184.133"),9300),
                        new TransportAddress(InetAddress.getByName("192.168.184.135"),9300),
                        new TransportAddress(InetAddress.getByName("192.168.184.136"),9300)
                });
        QueryBuilder queryBuilder=QueryBuilders.multiMatchQuery("java","title","url");

        SearchResponse response=client.prepareSearch("index_idea")
                .setQuery(queryBuilder).setSize(10).get();

        SearchHits hits=response.getHits();
        for (SearchHit hit:hits){
            System.out.println(hit.getSourceAsString());
            Map<String, Object> sourceAsMap = hit.getSourceAsMap();
            for (String key: sourceAsMap.keySet()){
                System.out.println(key+"-->"+sourceAsMap.get(key));
            }
        }



        client.close();
    }


    //term query
    @Test
    public void test12() throws UnknownHostException {
        Settings settings= Settings.builder().put("cluster.name","my-application").build();
        TransportClient client=new PreBuiltTransportClient(settings)
                .addTransportAddresses(new TransportAddress[]{
                        new TransportAddress(InetAddress.getByName("192.168.184.133"),9300),
                        new TransportAddress(InetAddress.getByName("192.168.184.135"),9300),
                        new TransportAddress(InetAddress.getByName("192.168.184.136"),9300)
                });
        QueryBuilder queryBuilder=QueryBuilders.termQuery("title","java");

        SearchResponse response=client.prepareSearch("index_idea")
                .setQuery(queryBuilder).setSize(10).get();

        SearchHits hits=response.getHits();
        for (SearchHit hit:hits){
            System.out.println(hit.getSourceAsString());
            Map<String, Object> sourceAsMap = hit.getSourceAsMap();
            for (String key: sourceAsMap.keySet()){
                System.out.println(key+"-->"+sourceAsMap.get(key));
            }
        }

        client.close();
    }



    //terms query
    @Test
    public void test13() throws UnknownHostException {
        Settings settings= Settings.builder().put("cluster.name","my-application").build();
        TransportClient client=new PreBuiltTransportClient(settings)
                .addTransportAddresses(new TransportAddress[]{
                        new TransportAddress(InetAddress.getByName("192.168.184.133"),9300),
                        new TransportAddress(InetAddress.getByName("192.168.184.135"),9300),
                        new TransportAddress(InetAddress.getByName("192.168.184.136"),9300)
                });
        QueryBuilder queryBuilder=QueryBuilders.termsQuery("title","12","11");

        SearchResponse response=client.prepareSearch("index_idea")
                .setQuery(queryBuilder).setSize(10).get();

        SearchHits hits=response.getHits();
        for (SearchHit hit:hits){
            System.out.println(hit.getSourceAsString());
            Map<String, Object> sourceAsMap = hit.getSourceAsMap();
            for (String key: sourceAsMap.keySet()){
                System.out.println(key+"-->"+sourceAsMap.get(key));
            }
        }
        client.close();
    }



    @Test
    public void test14() throws UnknownHostException {
        Settings settings= Settings.builder().put("cluster.name","my-application").build();
        TransportClient client=new PreBuiltTransportClient(settings)
                .addTransportAddresses(new TransportAddress[]{
                        new TransportAddress(InetAddress.getByName("192.168.184.133"),9300),
                        new TransportAddress(InetAddress.getByName("192.168.184.135"),9300),
                        new TransportAddress(InetAddress.getByName("192.168.184.136"),9300)
                });
        //rang query
        //QueryBuilder queryBuilder=QueryBuilders.rangeQuery("birthday").from("1990-01-01").to("2010-01-01").format("yyyy-MM-dd");

        //prefix查询
        //QueryBuilder queryBuilder=QueryBuilders.prefixQuery("name","zhang");

        //通配符查询,wildcard查询    *任意多个字符,?任意一个字符
        //QueryBuilder queryBuilder=QueryBuilders.wildcardQuery("name","zhao*");

        //fuzzy 模糊查询,写的不太对,也能查询到changge
       // QueryBuilder queryBuilder=QueryBuilders.fuzzyQuery("xiangqu","chagge");

        //type查询
        //QueryBuilder queryBuilder=QueryBuilders.typeQuery("blog");

        //ids查询
        QueryBuilder queryBuilder=QueryBuilders.idsQuery().addIds("1","2","3");


        SearchResponse response=client.prepareSearch("index_idea")
                .setQuery(queryBuilder).setSize(10).get();

        SearchHits hits=response.getHits();
        for (SearchHit hit:hits){
            System.out.println(hit.getSourceAsString());
            Map<String, Object> sourceAsMap = hit.getSourceAsMap();
            for (String key: sourceAsMap.keySet()){
                System.out.println(key+"-->"+sourceAsMap.get(key));
            }
        }
        client.close();
    }


    //聚合查询
    @Test
    public void test15() throws UnknownHostException {
        Settings settings= Settings.builder().put("cluster.name","my-application").build();
        TransportClient client=new PreBuiltTransportClient(settings)
                .addTransportAddresses(new TransportAddress[]{
                        new TransportAddress(InetAddress.getByName("192.168.184.133"),9300),
                        new TransportAddress(InetAddress.getByName("192.168.184.135"),9300),
                        new TransportAddress(InetAddress.getByName("192.168.184.136"),9300)
                });
        //最大值
       /* AggregationBuilder aggregationBuilder= AggregationBuilders.max("aggMax").field("age");
        SearchResponse response=client.prepareSearch("index_idea").addAggregation(aggregationBuilder).get();
        Max max=response.getAggregations().get("aggMax");
        System.out.println(max.getValue());*/

       //最小值
      /*  AggregationBuilder aggregationBuilder= AggregationBuilders.min("aggMin").field("age");
        SearchResponse response=client.prepareSearch("index_idea").addAggregation(aggregationBuilder).get();
        Min min = response.getAggregations().get("aggMin");
        System.out.println(min.getValue());*/

      //平均值
        /*AggregationBuilder aggregationBuilder= AggregationBuilders.avg("aggAvg").field("age");
        SearchResponse response=client.prepareSearch("index_idea").addAggregation(aggregationBuilder).get();
        Avg avg = response.getAggregations().get("aggAvg");
        System.out.println(avg.getValue());*/

        //总和
       /* AggregationBuilder aggregationBuilder= AggregationBuilders.sum("aggSum").field("age");
        SearchResponse response=client.prepareSearch("index_idea").addAggregation(aggregationBuilder).get();
        Sum sum = response.getAggregations().get("aggSum");
        System.out.println(sum.getValue());*/

        //求基数,指定字段中有多少个互不相同的年龄
        AggregationBuilder aggregationBuilder= AggregationBuilders.cardinality("aggCardinality").field("age");
        SearchResponse response=client.prepareSearch("index_idea").addAggregation(aggregationBuilder).get();
        Cardinality cardinality = response.getAggregations().get("aggCardinality");
        System.out.println(cardinality.getValue());

        client.close();
    }

    // query string
    @Test
    public void test16() throws UnknownHostException {
        Settings settings= Settings.builder().put("cluster.name","my-application").build();
        TransportClient client=new PreBuiltTransportClient(settings)
                .addTransportAddresses(new TransportAddress[]{
                        new TransportAddress(InetAddress.getByName("192.168.184.133"),9300),
                        new TransportAddress(InetAddress.getByName("192.168.184.135"),9300),
                        new TransportAddress(InetAddress.getByName("192.168.184.136"),9300)
                });
        //QueryBuilder queryBuilder=QueryBuilders.commonTermsQuery("name","zhaoliu");

        //查询包含唱歌,但不包含喝酒
        //QueryBuilder queryBuilder=QueryBuilders.queryStringQuery("+changge -hejiu");

        //查找个产不多,满足其中一个就行了
        QueryBuilder queryBuilder=QueryBuilders.simpleQueryStringQuery("+changge -hejiu");

        SearchResponse response=client.prepareSearch("index_idea")
                .setQuery(queryBuilder).setSize(10).get();

        SearchHits hits=response.getHits();
        for (SearchHit hit:hits){
            System.out.println(hit.getSourceAsString());
            Map<String, Object> sourceAsMap = hit.getSourceAsMap();
            for (String key: sourceAsMap.keySet()){
                System.out.println(key+"-->"+sourceAsMap.get(key));
            }
        }
        client.close();
    }


    //组合查询
    @Test
    public void test17() throws UnknownHostException {
        Settings settings= Settings.builder().put("cluster.name","my-application").build();
        TransportClient client=new PreBuiltTransportClient(settings)
                .addTransportAddresses(new TransportAddress[]{
                        new TransportAddress(InetAddress.getByName("192.168.184.133"),9300),
                        new TransportAddress(InetAddress.getByName("192.168.184.135"),9300),
                        new TransportAddress(InetAddress.getByName("192.168.184.136"),9300)
                });

     /*   QueryBuilder queryBuilder=QueryBuilders.boolQuery()
                .must(QueryBuilders.matchQuery("xingqu","changge"))
                .mustNot(QueryBuilders.matchQuery("xingqu","hejiu"))
                .should(QueryBuilders.matchQuery("address","bei jing"))
                //gte大于等于
                .filter(QueryBuilders.rangeQuery("birthday").gte("1990-01-01").format("yyyy-MM-dd"));*/


        //constantScoreQuery,不计算相关度分数
        QueryBuilder queryBuilder=QueryBuilders.constantScoreQuery(QueryBuilders.termQuery("name","zhaoliu"));


        SearchResponse response=client.prepareSearch("index_idea")
                .setQuery(queryBuilder).setSize(10).get();

        SearchHits hits=response.getHits();
        for (SearchHit hit:hits){
            System.out.println(hit.getSourceAsString());
            Map<String, Object> sourceAsMap = hit.getSourceAsMap();
            for (String key: sourceAsMap.keySet()){
                System.out.println(key+"-->"+sourceAsMap.get(key));
            }
        }
        client.close();
    }


    @Test
    public void test18() throws UnknownHostException {
        Settings settings= Settings.builder().put("cluster.name","my-application").build();
        TransportClient client=new PreBuiltTransportClient(settings)
                .addTransportAddresses(new TransportAddress[]{
                        new TransportAddress(InetAddress.getByName("192.168.184.133"),9300),
                        new TransportAddress(InetAddress.getByName("192.168.184.135"),9300),
                        new TransportAddress(InetAddress.getByName("192.168.184.136"),9300)
                });

        //分组聚合查询,按年领分组,查看有多少人
       /* AggregationBuilder aggregationBuilder= AggregationBuilders.terms("terms").field("age");
        SearchResponse response=client.prepareSearch("index_idea").addAggregation(aggregationBuilder).execute().actionGet();
        Terms terms=response.getAggregations().get("terms");
       for (Terms.Bucket entry:terms.getBuckets()){
           System.out.println(entry.getKey()+":"+entry.getDocCount());
       }*/


       //fileter聚合
      /*  QueryBuilder queryBuilder=QueryBuilders.termsQuery("age",20);
        AggregationBuilder aggregationBuilder=AggregationBuilders.filter("filter",queryBuilder);
        SearchResponse response=client.prepareSearch("index_idea").addAggregation(aggregationBuilder).execute().actionGet();
        Filter filter= response.getAggregations().get("filter");
        System.out.println(filter.getDocCount());*/


       // filters聚合多个条件
      /*  AggregationBuilder aggregationBuilder=AggregationBuilders.filters("filters",
                new FiltersAggregator.KeyedFilter("changge",QueryBuilders.termQuery("xiangqu","changge")),
                new FiltersAggregator.KeyedFilter("hejiu",QueryBuilders.termQuery("xiangqu","hejiu"))
        );
        SearchResponse response=client.prepareSearch("index_idea").addAggregation(aggregationBuilder).execute().actionGet();
        Filters filters= response.getAggregations().get("filters");
        for (Filters.Bucket entry:filters.getBuckets()){
            System.out.println(entry.getKey()+":"+entry.getDocCount());
        }*/

        //rang聚合,范围聚合
        AggregationBuilder aggregationBuilder=AggregationBuilders
                .range("range")
                .field("age")
                .addUnboundedTo(50)//(,to)
                .addRange(25,50)//[from,to)
                .addUnboundedFrom(25);//[from,)
        SearchResponse response=client.prepareSearch("index_idea").addAggregation(aggregationBuilder).execute().actionGet();
       Range range= response.getAggregations().get("range");
        /*
         * 结果为:
         *
         * *-50.0:5
         * 25.0-50.0:2
         * 25.0-*:3
         *
         */
        for (Range.Bucket entry:range.getBuckets()){
            System.out.println(entry.getKey()+":"+entry.getDocCount());
        }


        //missing聚合,找出哪个有null的
        AggregationBuilder aggregationBuilder1=AggregationBuilders.missing("missing").field("price");
        SearchResponse response1=client.prepareSearch("index_idea").addAggregation(aggregationBuilder1).execute().actionGet();
        Aggregation aggregation= response1.getAggregations().get("missing");
        System.out.println(aggregation.toString());

        client.close();
    }


    //使用java程序实现集群的管理
    @Test
    public void test19() throws UnknownHostException {
        Settings settings= Settings.builder().put("cluster.name","my-application").build();
        TransportClient client=new PreBuiltTransportClient(settings)
                .addTransportAddresses(new TransportAddress[]{
                        new TransportAddress(InetAddress.getByName("192.168.184.133"),9300),
                        new TransportAddress(InetAddress.getByName("192.168.184.135"),9300),
                        new TransportAddress(InetAddress.getByName("192.168.184.136"),9300)
                });

        ClusterHealthResponse clusterHealthResponse=client.admin().cluster().prepareHealth().get();
        String clusterName=clusterHealthResponse.getClusterName();
        System.out.println("clusterName="+clusterName);


        //存放数据的节点
        int numberOfDataNodes = clusterHealthResponse.getNumberOfDataNodes();
        System.out.println("numberOfDataNode=" + numberOfDataNodes);

        //一共有多少节点
        int numberOfNodes = clusterHealthResponse.getNumberOfNodes();
        System.out.println("numberOfNodes" + numberOfNodes);



        //集群中一种有多少索引clusterHealthResponse.getIndices()
        for (ClusterIndexHealth clusterIndexHealth:clusterHealthResponse.getIndices().values()){
            //得到索引的名称
            String index = clusterIndexHealth.getIndex();
            //该索引的主分片个数
            int numberOfShards = clusterIndexHealth.getNumberOfShards();
            //该索引的副分片个数
            int numberOfReplicas = clusterIndexHealth.getNumberOfReplicas();

            System.out.printf("index=%s,numberOfShards=%d,numberOfReplicas=%d\n",index,numberOfShards,numberOfReplicas);

            //该索引的状态
            ClusterHealthStatus status = clusterIndexHealth.getStatus();
            System.out.println(status.toString());

        }


        client.close();
    }

}

详情参考:https://www.elastic.co/guide/en/elasticsearch/client/java-api/6.2/java-docs.html

猜你喜欢

转载自blog.csdn.net/qq_39669058/article/details/87916115