一、DeleteByQueryRequestBuilder
DeleteByQueryRequestBuilder
是Elasticsearch Java客户端中的一个类,用于构建和执行基于查询条件删除文档的请求。实验结果表明:删除速率大概是每秒3万条左右。
DeleteByQueryRequestBuilder
类提供了一种方便的方式来构建删除文档的查询请求。它允许您指定一个查询条件,并使用该条件来删除匹配的文档。
使用DeleteByQueryRequestBuilder
类,您可以执行各种类型的查询,如基于字段值、范围、词条匹配、布尔逻辑查询等。
以下是DeleteByQueryRequestBuilder
类的一些常用方法:
-
setQuery(QueryBuilder query)
:设置查询条件。 -
setIndices(String... indices)
:设置要在哪些索引中执行删除操作。 -
setTypes(String... types)
:设置要在哪些类型中执行删除操作。 -
setRouting(String routing)
:设置路由值,以确定要删除的文档所在的特定分片。 -
setSize(int size)
:设置每次批量删除的文档数量。 -
setScroll(TimeValue scroll)
:设置滚动时间,如果删除的文档数量太多,可以使用滚动来分批删除。
二、Es版本号:6.8.23
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>transport</artifactId>
<version>6.8.23</version>
</dependency>
三、代码:
/**
* 根据查询条件删除Es数据
* @param queryBuilder 查询条件
*/
public long deleteByQueryInSlave(QueryBuilder queryBuilder) {
try {
// client 是初始化的Es客户端
BulkByScrollResponse response = new DeleteByQueryRequestBuilder(client, DeleteByQueryAction.INSTANCE)
.filter(queryBuilder)
// indexName是Es的索引
.source(indexName)
.get();
long deleted = response.getDeleted();
logger.info("deleteByQueryInSlave, 删除成功,删除文档条数: " + deleted + " ,indexName:" + indexName);
} catch (Exception e) {
logger.error("deleteByQueryInSlave-根据查询条件删除Es数据-异常, queryBuilder:{}", queryBuilder.toString(), e);
}
return 0;
}