ITPub博客

首页 > IT基础架构 > > ElasticSearch在Java中简单应用

ElasticSearch在Java中简单应用

作者:格伯纳 时间:2020-05-22 15:13:58 0 删除 编辑

在Java应用中实现查询

在Java应用中实现查询文档

配置



代码

import org.elasticsearch.action.get.GetResponse;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.TransportAddress;
import org.elasticsearch.transport.client.PreBuiltTransportClient;
import org.junit.Test;

import java.net.InetAddress;

public class ElasticTest {
    //从es中查询数据
    @Test
    public void test1() throws Exception {
        //指定ES集群
        Settings settings = Settings.builder().put("cluster.name","my-application").build();

        //创建访问es服务器的客户端
        TransportClient transportClient = new PreBuiltTransportClient(settings)
                .addTransportAddress(new TransportAddress(InetAddress.getByName("192.168.1.200"),9300));

        //数据查询
        GetResponse getResponse = transportClient.prepareGet("lib3","user","1").execute().actionGet();

        System.out.println(getResponse.getSourceAsString());

        transportClient.close();


    }
}

在Java应用中实现文档的添加和删除

创建索引

PUT /index_1
{
  "settings": {
    "number_of_replicas": 0,
    "number_of_shards": 3
  },
  "mappings": {
    "blog": {
      "properties": {
        "id": {
          "type": "long"
        },
        "title": {
          "type": "text",
          "analyzer": "ik_max_word"
        },
        "content": {
          "type": "text",
          "analyzer": "ik_max_word"
        },
        "postdate": {
          "type": "date"
        },
        "url": {
          "type": "text"
        }
      }
    }
  }
}

添加文档

PUT /index_1/blog/10
{
  "id":"1",
  "title":"Java设计模式",
  "content":"Java设计模式详解与案例",
  "postdate":"2018-05-20",
  "url":"https://www.baidu.com"
}


GET /index_1/blog/10

例子

添加文档

//添加文档
@Test
public void test2() throws Exception {
    //指定ES集群
    Settings settings = Settings.builder().put("cluster.name","my-application").build();

    //创建访问es服务器的客户端
    TransportClient transportClient = new PreBuiltTransportClient(settings)
            .addTransportAddress(new TransportAddress(InetAddress.getByName("192.168.1.200"),9300));

    //添加文档
    XContentBuilder xContentBuilder = XContentFactory.jsonBuilder()
            .startObject()
            .field("id", "1")
            .field("title", "精通Java")
            .field("content","精通Java之路")
            .field("postdate","2019-09-26")
            .field("url","https://biadu.com")
            .endObject();

    IndexResponse response = transportClient.prepareIndex("index_1","blog","1")
            .setSource(xContentBuilder).get();

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

    transportClient.close();


}

删除文档

//删除文档

@Test
public void test3() throws Exception {
    //指定ES集群
    Settings settings = Settings.builder().put("cluster.name","my-application").build();

    //创建访问es服务器的客户端
    TransportClient transportClient = new PreBuiltTransportClient(settings)
            .addTransportAddress(new TransportAddress(InetAddress.getByName("192.168.1.200"),9300));

    //删除文档
    DeleteResponse response = transportClient.prepareDelete("index_1","blog","10").get();

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

    transportClient.close();


}

在Java应用中实现更新文档

更新文档-post方式

//更新文档 post方式

@Test
public void test4() throws Exception {
    //指定ES集群
    Settings settings = Settings.builder().put("cluster.name","my-application").build();

    //创建访问es服务器的客户端
    TransportClient transportClient = new PreBuiltTransportClient(settings)
            .addTransportAddress(new TransportAddress(InetAddress.getByName("192.168.1.200"),9300));

    //更新文档
    UpdateRequest request = new UpdateRequest();
    request.index("index_1")
            .type("blog")
            .id("1")
            .doc(
              XContentFactory.jsonBuilder().startObject()
              .field("title","单例设计模式")
              .endObject()
            );

    UpdateResponse response = transportClient.update(request).get();

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

    transportClient.close();


}

更新文档-upsert方式

//更新文档 upsert方式

@Test
public void test5() throws Exception {
    //指定ES集群
    Settings settings = Settings.builder().put("cluster.name","my-application").build();

    //创建访问es服务器的客户端
    TransportClient transportClient = new PreBuiltTransportClient(settings)
            .addTransportAddress(new TransportAddress(InetAddress.getByName("192.168.1.200"),9300));

    //添加文档
    IndexRequest request1 = new IndexRequest("index_1","blog","8")
            .source(
              XContentFactory.jsonBuilder()
                      .startObject()
                      .field("id", "8")
                      .field("title", "精通Java8")
                      .field("content","精通Java8之路")
                      .field("postdate","2019-09-26")
                      .field("url","https://biadu.com")
                      .endObject()
            );

    UpdateRequest request2 = new UpdateRequest("index_1","blog","8")
            .doc(
                    XContentFactory.jsonBuilder().startObject()
                            .field("title","精通Java9")
                            .endObject()
            ).upsert(request1);

    UpdateResponse response = transportClient.update(request2).get();

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

    transportClient.close();


}

在Java应用中实现批量操作(mget&bulk)

批量查询文档

//批量查询文档

@Test
public void test6() throws Exception {
    //指定ES集群
    Settings settings = Settings.builder().put("cluster.name","my-application").build();

    //创建访问es服务器的客户端
    TransportClient transportClient = new PreBuiltTransportClient(settings)
            .addTransportAddress(new TransportAddress(InetAddress.getByName("192.168.1.200"),9300));

    //批量查询文档
    MultiGetResponse response = transportClient.prepareMultiGet()
            .add("index_1","blog","8","10")
            .add("lib3","user","1","2","3")
            .get();

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

    transportClient.close();

}

批量添加文档

//批量添加文档

@Test
public void test7() throws Exception {
    //指定ES集群
    Settings settings = Settings.builder().put("cluster.name","my-application").build();

    //创建访问es服务器的客户端
    TransportClient transportClient = new PreBuiltTransportClient(settings)
            .addTransportAddress(new TransportAddress(InetAddress.getByName("192.168.1.200"),9300));

    //批量添加文档
    BulkRequestBuilder bulkRequestBuilder = transportClient.prepareBulk();

    //第一个
    bulkRequestBuilder.add(transportClient.prepareIndex("lib2","books","8")
        .setSource(XContentFactory.jsonBuilder()
                .startObject()
                .field("title","python")
                .field("price",99)
                .endObject()
        )
    );

    //第二个
    bulkRequestBuilder.add(transportClient.prepareIndex("lib2","books","9")
            .setSource(XContentFactory.jsonBuilder()
                    .startObject()
                    .field("title","AI")
                    .field("price",199)
                    .endObject()
            )
    );

    //返回结果
    BulkResponse response = bulkRequestBuilder.get();
    System.out.println(response.status());
    if(response.hasFailures()){
        System.err.println("添加失败!");
    }


    transportClient.close();

}

在Java应用中实现查询删除和查询所有

删除匹配的数据

//删除匹配的文档

@Test
public void test8() throws Exception {
    //指定ES集群
    Settings settings = Settings.builder().put("cluster.name","my-application").build();

    //创建访问es服务器的客户端
    TransportClient transportClient = new PreBuiltTransportClient(settings)
            .addTransportAddress(new TransportAddress(InetAddress.getByName("192.168.1.200"),9300));

    BulkByScrollResponse response = DeleteByQueryAction.INSTANCE
            .newRequestBuilder(transportClient)
            .filter(QueryBuilders.matchQuery("title","单例"))
            .source("index_1")
            .get();

    //删除的条数
    long counts = response.getDeleted();

    System.out.println(counts);
    transportClient.close();

}

查询所有

//查询所有

@Test
public void test9() throws Exception {
    //指定ES集群
    Settings settings = Settings.builder().put("cluster.name","my-application").build();

    //创建访问es服务器的客户端
    TransportClient transportClient = new PreBuiltTransportClient(settings)
            .addTransportAddress(new TransportAddress(InetAddress.getByName("192.168.1.200"),9300));

    QueryBuilder queryBuilder = QueryBuilders.matchAllQuery();

    //查询所有
    SearchResponse searchResponse = transportClient.prepareSearch("lib3")
            .setQuery(queryBuilder)
            .setSize(3)
            .get();

    SearchHits searchHits = searchResponse.getHits();

    //遍历记录
    for(SearchHit hit : searchHits){
        System.out.println(hit.getSourceAsString());

        Map<String,Object> map = hit.getSourceAsMap();
        for(String key:map.keySet()){
            System.out.println(key+"="+map.get(key));
        }
    }
    transportClient.close();
}

在Java应用实现match查询multimath查询

match查询

//match查询

@Test
public void test10() throws Exception {
    //指定ES集群
    Settings settings = Settings.builder().put("cluster.name","my-application").build();

    //创建访问es服务器的客户端
    TransportClient transportClient = new PreBuiltTransportClient(settings)
            .addTransportAddress(new TransportAddress(InetAddress.getByName("192.168.1.200"),9300));

    //match查询
    QueryBuilder queryBuilder = QueryBuilders.matchQuery("interests","跑步");

    SearchResponse searchResponse = transportClient.prepareSearch("lib3")
            .setQuery(queryBuilder)
            .setSize(3)
            .get();

    SearchHits searchHits = searchResponse.getHits();

    //遍历记录
    for(SearchHit hit : searchHits){
        System.out.println(hit.getSourceAsString());

        Map<String,Object> map = hit.getSourceAsMap();
        for(String key:map.keySet()){
            System.out.println(key+"="+map.get(key));
        }
    }
    transportClient.close();
}

multimath查询

//multimath查询

@Test
public void test11() throws Exception {
    //指定ES集群
    Settings settings = Settings.builder().put("cluster.name","my-application").build();

    //创建访问es服务器的客户端
    TransportClient transportClient = new PreBuiltTransportClient(settings)
            .addTransportAddress(new TransportAddress(InetAddress.getByName("192.168.1.200"),9300));

    //multimath查询
    QueryBuilder queryBuilder = QueryBuilders.multiMatchQuery("跑步","interests","address");

    SearchResponse searchResponse = transportClient.prepareSearch("lib3")
            .setQuery(queryBuilder)
            .setSize(3)
            .get();

    SearchHits searchHits = searchResponse.getHits();

    //遍历记录
    for(SearchHit hit : searchHits){
        System.out.println(hit.getSourceAsString());

        Map<String,Object> map = hit.getSourceAsMap();
        for(String key:map.keySet()){
            System.out.println(key+"="+map.get(key));
        }
    }
    transportClient.close();
}

在Java应用中实现term查询和terms查询

term查询

//term查询

@Test
public void test12() throws Exception {
    //指定ES集群
    Settings settings = Settings.builder().put("cluster.name","my-application").build();

    //创建访问es服务器的客户端
    TransportClient transportClient = new PreBuiltTransportClient(settings)
            .addTransportAddress(new TransportAddress(InetAddress.getByName("192.168.1.200"),9300));

    //term查询
    QueryBuilder queryBuilder = QueryBuilders.termQuery("interests","乐");

    SearchResponse searchResponse = transportClient.prepareSearch("lib3")
            .setQuery(queryBuilder)
            .setSize(3)
            .get();

    SearchHits searchHits = searchResponse.getHits();

    //遍历记录
    for(SearchHit hit : searchHits){
        System.out.println(hit.getSourceAsString());

        Map<String,Object> map = hit.getSourceAsMap();
        for(String key:map.keySet()){
            System.out.println(key+"="+map.get(key));
        }
    }
    transportClient.close();
}

terms查询

//terms查询

@Test
public void test13() throws Exception {
    //指定ES集群
    Settings settings = Settings.builder().put("cluster.name","my-application").build();

    //创建访问es服务器的客户端
    TransportClient transportClient = new PreBuiltTransportClient(settings)
            .addTransportAddress(new TransportAddress(InetAddress.getByName("192.168.1.200"),9300));

    //terms查询
    QueryBuilder queryBuilder = QueryBuilders.termsQuery("interests","乐","跑");

    SearchResponse searchResponse = transportClient.prepareSearch("lib3")
            .setQuery(queryBuilder)
            .setSize(3)
            .get();

    SearchHits searchHits = searchResponse.getHits();

    //遍历记录
    for(SearchHit hit : searchHits){
        System.out.println(hit.getSourceAsString());

        Map<String,Object> map = hit.getSourceAsMap();
        for(String key:map.keySet()){
            System.out.println(key+"="+map.get(key));
        }
    }
    transportClient.close();
}

Java应用实现range,prefix,wildcard......查询

相关查询

@Test
public void test14() throws Exception {
    //指定ES集群
    Settings settings = Settings.builder().put("cluster.name","my-application").build();

    //创建访问es服务器的客户端
    TransportClient transportClient = new PreBuiltTransportClient(settings)
            .addTransportAddress(new TransportAddress(InetAddress.getByName("192.168.1.200"),9300));

    //Range查询
    /*QueryBuilder queryBuilder = QueryBuilders.rangeQuery("birthday")
            .from("2011-01-01")
            .to("2013-01-01")
            .format("yyyy-MM-dd");*/

    //Prefix查询
    //QueryBuilder queryBuilder = QueryBuilders.prefixQuery("name","明");

    //Wildcard通配符查询
    //QueryBuilder queryBuilder = QueryBuilders.wildcardQuery("name","明*");

    //Fuzzy糊查询
    QueryBuilder queryBuilder = QueryBuilders.fuzzyQuery("interests","唱");

    SearchResponse searchResponse = transportClient.prepareSearch("lib3")
            .setQuery(queryBuilder)
            .setSize(3)
            .get();

    SearchHits searchHits = searchResponse.getHits();

    //遍历记录
    for(SearchHit hit : searchHits){
        System.out.println(hit.getSourceAsString());

        Map<String,Object> map = hit.getSourceAsMap();
        for(String key:map.keySet()){
            System.out.println(key+"="+map.get(key));
        }
    }
    transportClient.close();
}

type查询

@Test
public void test14() throws Exception {
    //指定ES集群
    Settings settings = Settings.builder().put("cluster.name","my-application").build();

    //创建访问es服务器的客户端
    TransportClient transportClient = new PreBuiltTransportClient(settings)
            .addTransportAddress(new TransportAddress(InetAddress.getByName("192.168.1.200"),9300));

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

    SearchResponse searchResponse = transportClient.prepareSearch("index_1")
            .setQuery(queryBuilder)
            .get();

    SearchHits searchHits = searchResponse.getHits();

    //遍历记录
    for(SearchHit hit : searchHits){
        System.out.println(hit.getSourceAsString());

        Map<String,Object> map = hit.getSourceAsMap();
        for(String key:map.keySet()){
            System.out.println(key+"="+map.get(key));
        }
    }
    transportClient.close();
}

ids查询

//ids查询
@Test
public void test14_1() throws Exception {
    //指定ES集群
    Settings settings = Settings.builder().put("cluster.name","my-application").build();

    //创建访问es服务器的客户端
    TransportClient transportClient = new PreBuiltTransportClient(settings)
            .addTransportAddress(new TransportAddress(InetAddress.getByName("192.168.1.200"),9300));

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

    SearchResponse searchResponse = transportClient.prepareSearch("lib3")
            .setQuery(queryBuilder)
            .get();

    SearchHits searchHits = searchResponse.getHits();

    //遍历记录
    for(SearchHit hit : searchHits){
        System.out.println(hit.getSourceAsString());

        Map<String,Object> map = hit.getSourceAsMap();
        for(String key:map.keySet()){
            System.out.println(key+"="+map.get(key));
        }
    }
    transportClient.close();
}

在Java应用中实现聚合查询

//聚合查询

@Test
public void test15() throws Exception {
    //指定ES集群
    Settings settings = Settings.builder().put("cluster.name","my-application").build();

    //创建访问es服务器的客户端
    TransportClient transportClient = new PreBuiltTransportClient(settings)
            .addTransportAddress(new TransportAddress(InetAddress.getByName("192.168.1.200"),9300));

    //聚合查询

    //查询最大年龄
    /*AggregationBuilder aggregationBuilder = AggregationBuilders.max("aggMax").field("age");
    SearchResponse searchResponse = transportClient.prepareSearch("lib3")
            .addAggregation(aggregationBuilder)
            .get();
    Max max = searchResponse.getAggregations().get("aggMax");
    System.out.println(max.getValue());*/



    //查询最小年龄
    /*AggregationBuilder aggregationBuilder = AggregationBuilders.min("aggMin").field("age");
    SearchResponse searchResponse = transportClient.prepareSearch("lib3")
            .addAggregation(aggregationBuilder)
            .get();
    Min min = searchResponse.getAggregations().get("aggMin");
    System.out.println(min.getValue());*/

    //查询平均年龄
    /*AggregationBuilder aggregationBuilder = AggregationBuilders.avg("aggAvg").field("age");
    SearchResponse searchResponse = transportClient.prepareSearch("lib3")
            .addAggregation(aggregationBuilder)
            .get();
    Avg avg = searchResponse.getAggregations().get("aggAvg");
    System.out.println(avg.getValue());*/

    //查询年龄总合
    /*AggregationBuilder aggregationBuilder = AggregationBuilders.sum("aggSum").field("age");
    SearchResponse searchResponse = transportClient.prepareSearch("lib3")
            .addAggregation(aggregationBuilder)
            .get();
    Sum sum = searchResponse.getAggregations().get("aggSum");
    System.out.println(sum.getValue());*/

    //查询基数(互不相同)
    AggregationBuilder aggregationBuilder = AggregationBuilders.cardinality("aggCardinality").field("age");
    SearchResponse searchResponse = transportClient.prepareSearch("lib3")
            .addAggregation(aggregationBuilder)
            .get();
    Cardinality cardinality = searchResponse.getAggregations().get("aggCardinality");
    System.out.println(cardinality.getValue());

    transportClient.close();
}

在Java应用中实现query string

//query string

@Test
public void test16() throws Exception {
    //指定ES集群
    Settings settings = Settings.builder().put("cluster.name","my-application").build();

    //创建访问es服务器的客户端
    TransportClient transportClient = new PreBuiltTransportClient(settings)
            .addTransportAddress(new TransportAddress(InetAddress.getByName("192.168.1.200"),9300));

    //全文检索
    //QueryBuilder queryBuilder = QueryBuilders.commonTermsQuery("name","明");

    //精确查询,+必须含有  -不含有
    //QueryBuilder queryBuilder = QueryBuilders.queryStringQuery("+明 -小");

    //或条件查询,满足其中一个
    QueryBuilder queryBuilder = QueryBuilders.simpleQueryStringQuery("+明 -小");

    SearchResponse searchResponse = transportClient.prepareSearch("lib3")
            .setQuery(queryBuilder)
            .get();

    SearchHits searchHits = searchResponse.getHits();

    //遍历记录
    for(SearchHit hit : searchHits){
        System.out.println(hit.getSourceAsString());
      /*  Map<String,Object> map = hit.getSourceAsMap();
        for(String key:map.keySet()){
            System.out.println(key+"="+map.get(key));
        }*/
    }
    transportClient.close();
}

在Java应用中实现组合查询

//组合查询

@Test
public void test17() throws Exception {
    //指定ES集群
    Settings settings = Settings.builder().put("cluster.name","my-application").build();

    //创建访问es服务器的客户端
    TransportClient transportClient = new PreBuiltTransportClient(settings)
            .addTransportAddress(new TransportAddress(InetAddress.getByName("192.168.1.200"),9300));


    /*QueryBuilder queryBuilder = QueryBuilders.boolQuery()
            .must(QueryBuilders.matchQuery("interests","唱"))
            .mustNot(QueryBuilders.matchQuery("interests","步"))
            .should(QueryBuilders.matchQuery("address","深圳"))
            .filter(QueryBuilders.rangeQuery("birthday").gte("2000-10-10").format("yyyy-MM-dd"));*/

    QueryBuilder queryBuilder = QueryBuilders.constantScoreQuery(QueryBuilders.termQuery("name","晚"));

    SearchResponse searchResponse = transportClient.prepareSearch("lib3")
            .setQuery(queryBuilder)
            .get();

    SearchHits searchHits = searchResponse.getHits();

    //遍历记录
    for(SearchHit hit : searchHits){
        System.out.println(hit.getSourceAsString());
      /*  Map<String,Object> map = hit.getSourceAsMap();
        for(String key:map.keySet()){
            System.out.println(key+"="+map.get(key));
        }*/
    }
    transportClient.close();
}

在Java应用中实现桶聚合

统计年龄 人数

@Test
public void test18() throws Exception {
    //指定ES集群
    Settings settings = Settings.builder().put("cluster.name","my-application").build();

    //创建访问es服务器的客户端
    TransportClient transportClient = new PreBuiltTransportClient(settings)
            .addTransportAddress(new TransportAddress(InetAddress.getByName("192.168.1.200"),9300));

    //统计年龄  人数
    AggregationBuilder aggregationBuilder = AggregationBuilders.terms("terms").field("age");

    SearchResponse searchResponse = transportClient.prepareSearch("lib3").addAggregation(aggregationBuilder).execute().actionGet();
    Terms terms = searchResponse.getAggregations().get("terms");

    for(Terms.Bucket entry : terms.getBuckets()){
        System.out.println(entry.getKey()+":"+entry.getDocCount());
    }

    transportClient.close();
}

统计年龄等于 18

@Test
public void test18_1() throws Exception {
    //指定ES集群
    Settings settings = Settings.builder().put("cluster.name","my-application").build();

    //创建访问es服务器的客户端
    TransportClient transportClient = new PreBuiltTransportClient(settings)
            .addTransportAddress(new TransportAddress(InetAddress.getByName("192.168.1.200"),9300));

    //统计年龄  人数
    QueryBuilder queryBuilder = QueryBuilders.termQuery("age",18);
    AggregationBuilder aggregationBuilder = AggregationBuilders.filter("filter",queryBuilder);

    SearchResponse searchResponse = transportClient.prepareSearch("lib3").addAggregation(aggregationBuilder).execute().actionGet();

    Filter filter = searchResponse.getAggregations().get("filter");

    System.out.println(filter.getDocCount());

    transportClient.close();
}

条件组合查询,统计记录数

@Test
public void test18_2() throws Exception {
    //指定ES集群
    Settings settings = Settings.builder().put("cluster.name","my-application").build();

    //创建访问es服务器的客户端
    TransportClient transportClient = new PreBuiltTransportClient(settings)
            .addTransportAddress(new TransportAddress(InetAddress.getByName("192.168.1.200"),9300));

    //条件组合查询,统计记录数
    AggregationBuilder aggregationBuilder = AggregationBuilders.filters("filters",
            new FiltersAggregator.KeyedFilter("唱",QueryBuilders.termQuery("interests","唱")),
            new FiltersAggregator.KeyedFilter("步",QueryBuilders.termQuery("interests","步")));

    SearchResponse searchResponse = transportClient.prepareSearch("lib3").addAggregation(aggregationBuilder).execute().actionGet();

    Filters filters = searchResponse.getAggregations().get("filters");
    for (Filters.Bucket entry:filters.getBuckets()){
        System.out.println(entry.getKey()+":"+entry.getDocCount());
    }


    transportClient.close();
}

- result:

唱:3
步:3

范围条件组合查询,统计记录数

@Test public void test18_3() throws Exception { //指定ES集群 Settings settings = Settings.builder().put("cluster.name","my-application").build();

//创建访问es服务器的客户端
    TransportClient transportClient = new PreBuiltTransportClient(settings)
            .addTransportAddress(new TransportAddress(InetAddress.getByName("192.168.1.200"),9300));

    //范围条件组合查询,统计记录数
    AggregationBuilder aggregationBuilder = AggregationBuilders
            .range("range")
            .field("age")
            .addUnboundedTo(50)     //(,to)
            .addRange(25,50)        //[from,to)
            .addUnboundedFrom(25);  //[from,)

    SearchResponse searchResponse = transportClient.prepareSearch("lib3").addAggregation(aggregationBuilder).execute().actionGet();

    Range r = searchResponse.getAggregations().get("range");
    for (Range.Bucket entry:r.getBuckets()){
        System.out.println(entry.getKey()+":"+entry.getDocCount());
    }


    transportClient.close();
}

- result:

*-50.0:4
25.0-50.0:3
25.0-*:3

统计价格为null的记录

@Test
public void test18_4() throws Exception {
    //指定ES集群
    Settings settings = Settings.builder().put("cluster.name","my-application").build();

    //创建访问es服务器的客户端
    TransportClient transportClient = new PreBuiltTransportClient(settings)
            .addTransportAddress(new TransportAddress(InetAddress.getByName("192.168.1.200"),9300));

    //统计价格为null
    AggregationBuilder aggregationBuilder = AggregationBuilders.missing("missing")
            .field("price");

    SearchResponse searchResponse = transportClient.prepareSearch("lib2").addAggregation(aggregationBuilder).execute().actionGet();

    Aggregation aggregation = searchResponse.getAggregations().get("missing");
    System.out.println(aggregation.toString());

    transportClient.close();
}

- result:

{"missing":{"doc_count":1}}

在Java应用中实现集群管理

//集群管理

@Test
public void test19() throws Exception {
    //指定ES集群
    Settings settings = Settings.builder().put("cluster.name","my-application").build();

    //创建访问es服务器的客户端
    TransportClient transportClient = new PreBuiltTransportClient(settings)
            .addTransportAddress(new TransportAddress(InetAddress.getByName("192.168.1.200"),9300));

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

    int numberOfDataNodes = clusterHealthResponse.getNumberOfDataNodes();
    System.out.println("numberOfDataNodes="+numberOfDataNodes);

    int numberOfNodes = clusterHealthResponse.getNumberOfNodes();
    System.out.println("numberOfNodes="+numberOfNodes);

    for(ClusterIndexHealth health : clusterHealthResponse.getIndices().values()){
        String index = health.getIndex();
        int numberOfShards = health.getNumberOfShards();
        int numberOfReplicas = health.getNumberOfReplicas();
        System.out.printf("index=%s,numberOfShards=%d,numberOfReplicas=%d\n",index,numberOfShards,numberOfReplicas);

        ClusterHealthStatus status = health.getStatus();
        System.out.println(status);
    }

    transportClient.close();
}

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/31509949/viewspace-3128262/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: MySQL ALTER命令
请登录后发表评论 登录
全部评论
管理员

注册时间:2018-03-30

  • 博文量
    2383
  • 访问量
    984394