数据准备
ElasticSearch 实现分词全文检索 - 测试数据准备
delete-by-query
根据 term、match 等查询方式去删除大量的文档
如果需要删除的内容,是index下的大部分数据,不建议使用,因为去匹配文档时还是一个一个的拿到文档ID,去删除
推荐创建一个全新的index,将保留的文档内容,添加到全新的索引中
# 查询出有一条数据,删除后再查询,数据已不存在 GET /sms-logs-index/_search/ { "query": { "range": { "fee": { "lt": 15 } } } } # delete-by-query POST /sms-logs-index/_delete_by_query { "query": { "range": { "fee": { "lt": 15 } } } }
Java
@Test void deleteByQuery() throws Exception { String indexName = "sms-logs-index"; RestHighLevelClient client = ESClient.getClient(); //1. 创建DeleteByQueryRequest对象 DeleteByQueryRequest request = new DeleteByQueryRequest(indexName); //2. 指定查询条件 和 SearchRequest 指定Query的方式不一样 request.setQuery(QueryBuilders.rangeQuery("fee").lt(16)); //3. 执行删除 BulkByScrollResponse resp = client.deleteByQuery(request, RequestOptions.DEFAULT); //4. 输出返回值 System.out.println(resp.toString()); }