赞
踩
总结一下ES条件删除的方法,因为实际项目中需要这个功能。
注意 以下内容均是基于 ES 7 进行的,其他版本只可参考一下,有部分官方文档是参考 ES 6 的内容。
如果不方便,或者说不想编写代码,并且安装配置好kibana这个工具的话,推荐使用kibana,然后使用query语句进行删除,非常的简单,方便。
官方文档地址:https://www.elastic.co/guide/en/elasticsearch/reference/6.0/docs-delete-by-query.html
1.打开进入kibana网页,选择左边倒数第三个(Dev Tools),然后进入query环境。
2. 输入query语句,进行删除操作,然后点击执行即可。
POST smileyan/_delete_by_query
{
"query": {
"match": {
"num": "39"
}
}
}
解释:其中smileyan即es自己的索引名(可以理解为数据库名),而"num": "39"就是自己输入的条件,表示删除es中smileyan索引下的所有num=39的数据。
老规矩,先贴出官网文档地址:https://www.elastic.co/guide/en/elasticsearch/client/java-rest/current/java-rest-high-document-delete.html
maven依赖包导入不在此说明,如果没有导入请参考这个地址,elastic search7 java开发简单教程 复制粘贴一下就可以了。具体使用方法:
具体代码如下:
/** * 根据条件匹配删除 * @param mustMap * @return */ public static long delete(RestHighLevelClient client, 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(); } /** * getRestHighLevelClient * * @return */ public static RestHighLevelClient getRestHighLevelClient() { RestHighLevelClient client = new RestHighLevelClient( RestClient.builder(new HttpHost(ES_URL, ES_PORT, "http"))); return client; }
下面是一个简单例子:
public static void main(String[] args) {
Map<String,Object> map = new HashMap<>();
map.put("sn","123456789");
try {
RestHighLevelClient client = ElasticSearchUtil.getRestHighLevelClient();
long delete = ElasticSearchUtil.delete(client, map, 40);
System.out.println("deleted "+delete);
client.close();
} catch (IOException e) {
e.printStackTrace();
}
}
当然也可以选择使用java执行query语句,基本方法差不多,就是拼一下query语句再提交,相对而言使用已经封装好的方法更加方便一些,也就是上面的那个例子。
如果是根据id查询的话,更加简单,请参考 elastic search7 java开发简单教程
总而言之比较简单,希望能够帮到其他小伙伴,如果有遇到什么问题,欢迎留言提问,一定会尽自己所能回答问题,谢谢!
Smileyan
2019年8月22日 16:05
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。