1. 编写目的
由于ElasticSearch7和以前的版本有所不同,所以在使用新版本时,也需要去官网查看新的文档,找到对应的解决方法。这里是介绍es7.2如何删除单个文档。
es7版本其他简单操作,比如添加文档,删除索引,模糊搜索,多条件搜索等可以参考【elastic search7 java开发简单教程】https://blog.csdn.net/smileyan9/article/details/94474914。
2. 具体过程
- 引入依赖包和建立连接等内容请参考【elastic search7 java开发简单教程】
- 具体代码如下:
/** * 根据id进行文档删除 * @param id * @return * @throws IOException */ public static String deleteById(String id) throws IOException { // 建立连接,获得RestHighLevelClient对象,getRestHighLevelClient方法 // 请参考https://blog.csdn.net/smileyan9/article/details/94474914 RestHighLevelClient client = getRestHighLevelClient(); // 创建DeleteRequest对象,用于删除 DeleteRequest deleteRequest = new DeleteRequest(ElasticSearchUtil.ES_NAME); // 配置对应的条件,即id deleteRequest.id(id); // 进行删除操作,如果希望知道删除是否成功 DeleteResponse delete = client.delete(deleteRequest, RequestOptions.DEFAULT); // Smileyan System.out.println(delete.getResult()); return delete.getResult()+""; }
- 如果删除成功的话,则会返回"DELETE";
- 如果id不存在,则会返回"NOT_FOUND"
- 等等
重要补充: 多(单)条件删除
CSDN有人联系我说如何加条件进行删除,如果有遇到什么问题,欢迎交流,我们一起解决。代码如下:
/**
* 根据条件匹配删除
* @param mustMap
* @return
*/
public static long delete(Map<String,Object> mustMap,int size) throws IOException {
DeleteByQueryRequest request =
new DeleteByQueryRequest(ElasticSearchUtil.ES_NAME);
// 根据多个条件 生成 boolQueryBuilder
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
for (Map.Entry<String, Object> entry : mustMap.entrySet()) {
boolQueryBuilder
.must(QueryBuilders.matchQuery(entry.getKey(), entry.getValue()));
}
request.setQuery(boolQueryBuilder);
request.setSize(size);
RestHighLevelClient client = getRestHighLevelClient();
DeleteRequest deleteRequest = new DeleteRequest(ElasticSearchUtil.ES_NAME);
BulkByScrollResponse bulkResponse =
client.deleteByQuery(request, RequestOptions.DEFAULT);
return bulkResponse.getDeleted();
}
【相应的官网文档地址】:https://www.elastic.co/guide/en/elasticsearch/client/java-rest/current/java-rest-high-document-delete.html
3. 总结
新版本es将那些基本操作封装得很好,但是官网提供的文档不够详细。所以遇到问题是很正常的,但是经过一番折腾,解决了各种问题也是很不错的。
如果遇到什么问题,欢迎留言评论。
Smileyan
2019年7月21日