python elasticsearch delete_elasticsearch Delete (根据条件删除)

在Elasticsearch 5.x版本中,Delete-by-Query API重新成为核心功能,不再需要像2.x版本那样安装插件。现在可以通过简单的HTTP请求或Java代码来实现数据的删除。例如,使用Java API,可以构建BoolQueryBuilder,根据特定条件删除索引中的记录。这个变化使得在最新版本中操作Elasticsearch更加便捷。
摘要由CSDN通过智能技术生成

之前在 2.X版本里 这个Delete By Query功能被去掉了 因为官方认为会引发一些错误 如需使用 需要自己安装插件。

bin/plugin install delete-by-query

需要使用时

DELETE /索引名/需要清空的type/_query

{

"query": {

"match_all": {}

}

}

那么在5.x版本中 这个api又被官方重新加回自带功能。新特性里是这么说的。

Delete-by-query 和 Update-by-query 重新回到 core ,以前是插件,现在可以直接使用了,

也是构建在 Reindex 机制之上。

(es1.x版本是直接支持,在es2.x中提取为插件,5.x继续回归直接支持)

我查看了官方手册后发现使用也不一样了 见下图

即替换以前的 _query 为_delete_by_query 便可达到目的。

通过header插件删除

48304ba5e6f9fe08f3fa1abda7d326ab.png

使用head插件删除指定数据

http://serverhost:9200/index/type/_delete_by_query post

{

"query": {

"match": {

属性字段: 要删除的属性值

}

}

}

48304ba5e6f9fe08f3fa1abda7d326ab.png

Java代码实现:

48304ba5e6f9fe08f3fa1abda7d326ab.png

String index = "wareic";

BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery();

queryBuilder.must(QueryBuilders.termQuery("groupID", "42023"));

BulkIndexByScrollResponse response =

DeleteByQueryAction.INSTANCE.newRequestBuilder(client)

.filter(queryBuilder)

.source(index)

.get();

long deleted = response.getDeleted();

System.out.println(deleted);

48304ba5e6f9fe08f3fa1abda7d326ab.png

另一种实现方式:

48304ba5e6f9fe08f3fa1abda7d326ab.png

String index = "wareic";

String type = "product";

BulkRequestBuilder bulkRequest = client.prepareBulk();

SearchRequestBuilder searchRequestBuilder = client.prepareSearch(index).setTypes(type);

//分页

searchRequestBuilder.setFrom(0).setSize(1000);

BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery();

queryBuilder.must(QueryBuilders.termQuery("groupID", "3445"));

searchRequestBuilder.setQuery(queryBuilder);

SearchResponse response = searchRequestBuilder.execute().get();

for(SearchHit hit : response.getHits()){

String id = hit.getId();

bulkRequest.add(client.prepareDelete(index, type, id).request());

}

BulkResponse bulkResponse = bulkRequest.get();

if (bulkResponse.hasFailures()) {

for(BulkItemResponse item : bulkResponse.getItems()){

System.out.println(item.getFailureMessage());

}

} else {

System.out.println("delete ok");

}

48304ba5e6f9fe08f3fa1abda7d326ab.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值