es之java删除文档操作

删除文档操作

@Test
public void deleteDocument(){
    DeleteResponse response = client.prepareDelete("twitter4", "tweet", "1").get();
    // 索引名称
    String _index = response.getIndex();
    // 类型
    String _type = response.getType();
    // 文档ID
    String _id = response.getId();
    // 版本
    long _version = response.getVersion();
    // 返回的操作状态
    RestStatus status = response.status();
    System.out.println("索引名称:"+_index+" "+"类型 :" +  _type + " 文档ID:"+_id+" 版本 :"+_version+" 返回的操作状态:"+status);
}

2:通过查询的方式删除

往往生产的需求是能够类似mysql一样,通过查询出符合条件的数据进行删除:

比如mysql:

DELETE FROM Employees WHERE ps_code= 
(SELECT ps_code 不存在 FROM Employees WHERE ps_code NOT IN `icq_user_info``persons`
(SELECT ps_code FROM Persons));

那么es也是支持这种操作的:DeleteByQueryAction允许检索一个索引,把匹配出来的字段删除

@Test
public void queryDeleteDocument(){
    BulkByScrollResponse response =
            DeleteByQueryAction.INSTANCE.newRequestBuilder(client)
                    .filter(QueryBuilders.matchQuery("user", "tom"))//key -- value
                    .source("twitter4")//索引名称
                    .get();

    long deleted = response.getDeleted();
    System.out.println("总共删除时间:"+deleted);
}

3: 优化-通过查询进行删除

上面的查询删除,在实际的生产中会占用大量的时间,所以为了不阻塞其他的操作,应该把上面的操作变成异步执行方式

/**
 * 优化--异步的方式执行
 * */
@Test
public void tuningqueryDeleteDocument(){
    DeleteByQueryAction.INSTANCE.newRequestBuilder(client)
            .filter(QueryBuilders.matchQuery("user", "kimchy"))
            .source("twitter4")
            .execute(new ActionListener<BulkByScrollResponse>() {
                public void onResponse(BulkByScrollResponse response) {
                    long deleted = response.getDeleted();
                    System.out.println("总共删除时间:"+deleted);//因为是异步执行,所以不会打印
                }
                public void onFailure(Exception e) {
                    System.out.println("程序运行出错");
                }

            });

}

 

转载于:https://www.cnblogs.com/niutao/p/10909247.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值