一、介绍

根据term,match等查询方式去删除大量的文档

注意:如果需要删除的内容,是该index下的大部分数据,不建议使用delete-by-query, 因为这种方式匹配文档,是一条条的去删除的,非常消耗性能
推荐: 新建一个新的index,将保留的文档内容添加到新的index,然后再直接访问新的index即可。

二、实操

2.1、RESTful 代码

POST /person/_delete_by_query
{
  "query": {
    "range": {
      "age": {
        "gte": 30,
        "lte": 50
      }
    }
  }
}

2.2、java 代码

package com.chb.test;

import com.chb.utils.ESClient;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.index.reindex.BulkByScrollResponse;
import org.elasticsearch.index.reindex.DeleteByQueryRequest;
import org.junit.Test;

import java.io.IOException;

public class DeleteDemo {
    RestHighLevelClient client = ESClient.getClient();
    String index = "person";

    @Test
    public void deleteByQuery() throws IOException {
        // 1、创建DeleteByQueryRequest对象
        DeleteByQueryRequest request = new DeleteByQueryRequest(index);

        // 2、指定检索条件, 和 SearchRequest指定query方式不一样
        request.setQuery(QueryBuilders.rangeQuery("age").gte(30).lte(50));

        // 3、 执行删除
        BulkByScrollResponse resp = client.deleteByQuery(request, RequestOptions.DEFAULT);

        // 4、返回结果
        System.out.println(resp);
    }
}

关注我的公众号【宝哥大数据】,更多干货

在这里插入图片描述

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐