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(); // 版本冲突次数