这一篇 我们讲解一下 Java 常用的 删除ES文档 doc 的方法,也是 分为 单个 删除 和 批量删除
删除的时候要进行定位,indexName + typeName + docId 进行 唯一 确定文档 坐标 进行删除,一般我使用 这种方式删除(当然 还有其他方法)
所以 你要 先获取 docId 才可以 删除
单个删除:
/**
*
* @param docId
*/
public void deleteData(String docId){
boolean exist = EsClientUtil.isExistIndex(name);
if(exist){
ESClient client = EsClientUtil.getDefaultDelegateClient();
// 先indexName typename docID
client.prepareDelete(name, name, docId)
.execute().actionGet();
}
}
批量删除:
这里我这是 先查询出 docId 再进行批量删除
/**
* 删除信息
* @param ids
*/
public void deleteInfo(long[] ids){
if(ids == null || ids.length == 0) return;
boolean exist = EsClientUtil.isExistIndex(name);
if(exist){
ESClient client = EsClientUtil.getDefaultDelegateClient();
// 先查询 再 删除 inquery ids.length 1024 限制
QueryBuilder qb = QueryBuilders.inQuery("id", ids);// fieldName
SearchResponse respose = client.prepareSearch(name)
.setTypes(name)
.setQuery(qb)
.setSize(Integer.MAX_VALUE)
.execute().actionGet();
SearchHit[] hits = respose.getHits().getHits();
if(hits.length > 0){
// 开启批量删除
BulkRequestBuilder bulkfresh = client.prepareBulk().setRefresh(true);
for (SearchHit searchHit : hits) {
DeleteRequest deleteRequest = new DeleteRequest(name, name, searchHit.getId());
bulkfresh.add(deleteRequest);
}
// 执行
bulkfresh.execute().actionGet();
}
}
}