一架梯子,一头程序猿,仰望星空!

Java Elasticsearch Delete By Query API 批量删除


Java ES Delete By Query API 主要用于批量删除操作,支持设置ES查询条件。

创建DeleteByQueryRequest对象

// 创建 DeleteByQueryRequest 对象,设置批量删除的索引名为:source1和source2
// ps: 支持同时操作多个索引
DeleteByQueryRequest request =
        new DeleteByQueryRequest("source1", "source2"); 

版本冲突

批量更新内容的时候,可能会遇到文档版本冲突的情况,需要设置版本冲突的时候如何处理。

版本冲突解决方案如下:

  • proceed - 忽略版本冲突,继续执行
  • abort - 遇到版本冲突,中断执行
request.setConflicts("proceed"); 

设置查询条件

// 设置term查询条件,查询user字段=kimchy的文档内容
request.setQuery(new TermQueryBuilder("user", "kimchy")); 

ES的查询语法是非常丰富的,这里仅给出一种写法,JAVA ES查询用法请参考后续的章节。

限制删除文档数量

可以限制批量删除文档的数量

request.setMaxDocs(10); 

执行请求

BulkByScrollResponse bulkResponse =
        client.deleteByQuery(request, RequestOptions.DEFAULT);

处理结果

TimeValue timeTaken = bulkResponse.getTook(); // 批量操作消耗时间
boolean timedOut = bulkResponse.isTimedOut(); // 是否超时
long totalDocs = bulkResponse.getTotal(); // 涉及文档总数
long deletedDocs = bulkResponse.getDeleted(); // 成功删除文档数量
long versionConflicts = bulkResponse.getVersionConflicts(); // 版本冲突次数