Java操作ES(二):TransportClient对ES简单增删改查

Elasticsearch 7.0中开始弃用TransportClient,并在8.0中完全删除它,为此这里我们只简单介绍一下TransportClient 中增删改查的API。首先看一下TransportClient整体的API:

整个客户端API提供两个最底层的方法,execute,其关键特征如下:

  • ActionFuture<Response> execute(Action<Request, Response, RequestBuilder> action, Request request);
    返回ActionFuture,根据名称即可知道,该方法是典型的异步调用,Future模式。
  • void execute(Action<Request, Response, RequestBuilder> action, Request request, ActionListener<Response> listener);
    无返回值,但需要传入ActionListener<Response> listener,同样根据名称即可知道,该参数的作用是事件监听器(回调方法),也就是收到服务端响应后,调用回调函数,进行结果处理。
    注意:ElasticSearch Client API 其本质是使用异步请求模式。
  • prepare 开头的方法,例如IndexRequestBuilder prepareIndex()
    这类API的设计是使用Build模式,先通过build构建请求参数,最终会通过调用get()方法完成接口调用。

1、建立ES集群连接

    // 建立ES集群连接
    private String IP;
    private int PORT;
    TransportClient client ;

    @Before
    public void init(){
        this.IP = "192.168.5.166";
        this.PORT = 9300;
        try {
            Settings settings = Settings.builder().put("cluster.name", "my-application").put("client.transport.sniff", true).build();
            client = new PreBuiltTransportClient(settings)
                    .addTransportAddresses(new TransportAddress(InetAddress.getByName(IP), PORT));
        } catch (UnknownHostException e) {
            e.printStackTrace();
        }
    }

2、查询: 

prepareGet:根据ID精确查询节点数据

    @Test
    public void test2() {
        GetRequestBuilder requestBuilder = client.prepareGet("index3", "user1", "1");
        GetResponse response = requestBuilder.execute().actionGet();
        Map<String, Object> source = response.getSource();
        System.out.println(source.keySet().toString());
    }

prepareMultiGet:同时查询多条数据

    @Test
    public void test3() {
        MultiGetResponse multiGetItemResponses = client.prepareMultiGet()
                .add("index3", "user1", "1")
                .add("index3", "user1", "hOuIw28B2HN-5BvRXzVY")
                .get();
        MultiGetItemResponse[] responses = multiGetItemResponses.getResponses();
        for(MultiGetItemResponse response : responses){
            GetResponse getResponse = response.getResponse();
            System.out.println(getResponse.getSource().toString());
        }
    }

prepareSearch:根据字段查询

    @Test
    public void test4() {
        // 这只查询的字段和字段值,这里会进行分词查询,相当于match
        QueryBuilder builder = QueryBuilders.matchQuery("interest","boxing computer");
        SearchResponse searchResponse = client.prepareSearch("index3")
                .setTypes("user1")
                .setSearchType(QUERY_THEN_FETCH)
                .setQuery(builder)
                .setSize(10)
                .get();
        SearchHit[] searchHits = searchResponse.getHits().getHits();
        for(SearchHit searchHit : searchHits){
            System.out.println(searchHit.getSourceAsString());
        }
    }

3、修改

update:

    @Test
    public void test5() throws Exception{
        UpdateRequest updateRequest = new UpdateRequest();
        UpdateRequest doc = updateRequest
                .index("index3")
                .type("user1")
                .id("1")
                .doc(
                        XContentFactory.jsonBuilder().startObject()
                                .field("name","rabbit.sun")
                                .field("interest","game steak")
                                .endObject()
                );
        UpdateResponse response = client.update(doc).get();
        System.out.println(response.status().toString());
    }

4、新增

    @Test
    public void test6() throws Exception{
        XContentBuilder doc = XContentFactory.jsonBuilder().startObject()
                .field("name", "rabbit.sun")
                .field("birthday", "1998-4-6")
                .field("address", "HeNan Province")
                .field("company", "YunZhiHui")
                .field("height", 160)
                .endObject();
        IndexResponse response = client.prepareIndex("index3", "user1","2").setSource(doc).get();
        System.out.println(response.status());
    }

 

5、删除

prepareDelete:根据ID删除

    @Test
    public void test7(){
        DeleteResponse response = client.prepareDelete("index3", "user1", "hOuIw28B2HN-5BvRXzVY").get();
        System.out.println(response.status());
    }

DeleteByQueryAction:根据字段删除

    @Test
    public void test8(){
        BulkByScrollResponse response = DeleteByQueryAction.INSTANCE
                .newRequestBuilder(client)
                .filter(QueryBuilders.matchQuery("name","leo.wang"))
                .source("index3") //index
                .get();
        System.out.println(response.getDeleted());
    }

 

发布了74 篇原创文章 · 获赞 19 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/zhoushimiao1990/article/details/104860340