一、DeleteByQueryRequestBuilder

DeleteByQueryRequestBuilder是Elasticsearch Java客户端中的一个类,用于构建和执行基于查询条件删除文档的请求。实验结果表明:删除速率大概是每秒3万条左右。

DeleteByQueryRequestBuilder类提供了一种方便的方式来构建删除文档的查询请求。它允许您指定一个查询条件,并使用该条件来删除匹配的文档。

使用DeleteByQueryRequestBuilder类,您可以执行各种类型的查询,如基于字段值、范围、词条匹配、布尔逻辑查询等。

以下是DeleteByQueryRequestBuilder类的一些常用方法:

  1. setQuery(QueryBuilder query):设置查询条件。
  2. setIndices(String... indices):设置要在哪些索引中执行删除操作。
  3. setTypes(String... types):设置要在哪些类型中执行删除操作。
  4. setRouting(String routing):设置路由值,以确定要删除的文档所在的特定分片。
  5. setSize(int size):设置每次批量删除的文档数量。
  6. 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;
    }

 

04-20 14:33