当前位置:   article > 正文

ES条件删除_es 条件删除

es 条件删除

编写目的

总结一下ES条件删除的方法,因为实际项目中需要这个功能。

注意 以下内容均是基于 ES 7 进行的,其他版本只可参考一下,有部分官方文档是参考 ES 6 的内容。

如果不编写代码,使用query语句进行删除

如果不方便,或者说不想编写代码,并且安装配置好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"
    }
  }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

解释:其中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;
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34

下面是一个简单例子:

    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();
        }
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

当然也可以选择使用java执行query语句,基本方法差不多,就是拼一下query语句再提交,相对而言使用已经封装好的方法更加方便一些,也就是上面的那个例子。

另外

如果是根据id查询的话,更加简单,请参考 elastic search7 java开发简单教程

总结

总而言之比较简单,希望能够帮到其他小伙伴,如果有遇到什么问题,欢迎留言提问,一定会尽自己所能回答问题,谢谢!

Smileyan
2019年8月22日 16:05

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/278791
推荐阅读
相关标签
  

闽ICP备14008679号