一、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;}