【ElasticSearch教程】--- Elasticsearch JavaApi 文档批量操作(十九)

Elasticsearch JavaApi 文档批量操作

在实际的工程项目中,数据批量操作的需求是比较强烈的,所以ESAPI也提供了这样的应用场景。下面将演示如何进行批量的文档增加,文档删除操作。

文档批量增加

ES中批量的操需要使用到一个请求对象就是BulkRequest,然后将要做的请求集合添加到BulkRequest中,最后使用bulk方法发送批量请求。 批量添加文档的步骤如下

  1. 定义要链接主机的信息,这里使用org.apache.http.HttpHost对象。
  2. 构建RestClientBuilder,该对象由RestClient.builder(host);构建。
  3. 建立与ES服务器链接的客户端对象RestHighLevelClient, 直接创建即可。
  4. 创建org.elasticsearch.action.bulk.BulkRequest对象,例如对象名叫bulkRequest
  5. 创建添加文档的org.elasticsearch.action.index.IndexRequest对象,并加入到bulkRequest
  6. 提交请求,批量添加文档。client.bulk(bulkRequest, RequestOptions.DEFAULT);
  7. 最后要关闭client。 要不然进程会一致挂起。
    样例代表如下:
package com.maomao.elastic.search.batch;

import org.apache.http.HttpHost;
import org.elasticsearch.action.bulk.BulkItemResponse;
import org.elasticsearch.action.bulk.BulkRequest;
import org.elasticsearch.action.bulk.BulkResponse;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestClientBuilder;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.common.xcontent.XContentType;

import java.util.Arrays;

public class DocInsertBatch {

    public static void main(String[] args) throws Exception {
        HttpHost host = new HttpHost("127.0.0.1", 9200, "http");
        RestClientBuilder builder = RestClient.builder(host);
        RestHighLevelClient client = new RestHighLevelClient(builder);

        // 批量操作其实就是把 一堆的request添加到bulkRequest中,所以首先要构建一个bulkRequest
        BulkRequest bulkRequest = new BulkRequest();
        bulkRequest.add(new IndexRequest().index("teacher").id("7002").source(XContentType.JSON, "name", "宋江", "sex", "男", "age", "35", "title", "副教授"));
        bulkRequest.add(new IndexRequest().index("teacher").id("7003").source(XContentType.JSON, "name", "花荣", "sex", "男", "age", "25", "title", "助教"));
        bulkRequest.add(new IndexRequest().index("teacher").id("7004").source(XContentType.JSON, "name", "孙二娘", "sex", "女", "age", "28", "title", "副教授"));
        // 调用方法为bulk
        BulkResponse bulkResponse = client.bulk(bulkRequest, RequestOptions.DEFAULT);
        Arrays.stream(bulkResponse.getItems()).map(BulkItemResponse::getResponse).forEach(System.out::println);
        client.close();
    }
}

执行查询操作。
执行完查询操作之后,继续使用PostMan进行restfulapi进行查询,看是否都被成功添加到ES服务器:
查询批量添加结果
从上面可以看出,刚才批量添加的数据已经成功添加到服务器了。

批量删除

操作基本与批量添加一致,只需要把刚才IndexRequest对象换成DeleteRequest就可以了。接下来实验,我们将使用批量删除的方式将刚添加的700270037004删除掉.
上代码:

package com.maomao.elastic.search.batch;

import org.apache.http.HttpHost;
import org.elasticsearch.action.bulk.BulkItemResponse;
import org.elasticsearch.action.bulk.BulkRequest;
import org.elasticsearch.action.bulk.BulkResponse;
import org.elasticsearch.action.delete.DeleteRequest;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestClientBuilder;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.common.xcontent.XContentType;

import java.util.Arrays;

public class DocDeleteBatch {

    public static void main(String[] args) throws Exception {
        HttpHost host = new HttpHost("127.0.0.1", 9200, "http");
        RestClientBuilder builder = RestClient.builder(host);
        RestHighLevelClient client = new RestHighLevelClient(builder);

        // 批量操作其实就是把 一堆的request添加到bulkRequest中,所以首先要构建一个bulkRequest
        BulkRequest bulkRequest = new BulkRequest();
        bulkRequest.add(new DeleteRequest().index("teacher").id("7002"));
        bulkRequest.add(new DeleteRequest().index("teacher").id("7003"));
        bulkRequest.add(new DeleteRequest().index("teacher").id("7004"));
        // 调用方法为bulk
        BulkResponse bulkResponse = client.bulk(bulkRequest, RequestOptions.DEFAULT);
        Arrays.stream(bulkResponse.getItems()).map(BulkItemResponse::getResponse).forEach(System.out::println);
        client.close();
    }
}

执行操作结果如下:
删除结果输出
再继续使用PostMan继续查询一下是否服务器上已经被删除了

删除结果查询
通过查询,我们发现hits字段已经为空了,也就是不在存在数据了,也就是说文档被彻底删除掉了。批量操作成功。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值