码迷,mamicode.com
首页 > 编程语言 > 详细

ElasticSearch Java Api-5.x删除和更新索引数据

时间:2018-06-01 15:36:12      阅读:1006      评论:0      收藏:0      [点我收藏+]

标签:span   creat   tee   获取   instance   index   clust   col   string   

版本背景:

<dependency>
    <groupId>org.elasticsearch.client</groupId>
    <artifactId>transport</artifactId>
    <version>5.4.1</version>
</dependency>

 

首先获取es的连接:

        

 / /设置集群名称  
     private static final   Settings settings = Settings.builder().put("cluster.name", "my-application").build();// 集群名  

        //创建client  

     private static final      client  = new PreBuiltTransportClient(settings)  

                          .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"), 9300));  

 

 

     创建索引并建立映射

public String create(Map<String, Object> map) {
        
        
                IndexResponse response = client  
                        .prepareIndex("index", "type", "主键id")  
                        .setSource(
                                XContentFactory.jsonBuilder().startObject()  
                                    .field("业务字段1", "业务字段1的值")  
                                    .field("业务字段2", "业务字段2的值")  
                                .endObject()).execute()  
                        .actionGet(); 
           
        }
        
        return "success";
    }

  删除,根据主键id

public String deleteESInfo(Map<String, Object> map) {
        
                     DeleteResponse deleteresponse =client.prepareDelete( "index", "type",  "主键id")  
                                .execute()  
                                .actionGet();  
                     result=deleteresponse.getResult().toString();
                 
                
             
        return result;
    }

但是这个只是根据主键删除,如果根据条件查询去删除那?之前在 2.X版本里 这个Delete By Query功能被去掉了 因为官方认为会引发一些错误 如需使用 需要自己安装delete-by-query插件。5.0版本以上,又选择回归。来条件删除

BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery();  
        queryBuilder.must(QueryBuilders.termQuery("业务字段1", "业务字段1的值"));    
          
        BulkByScrollResponse response =  
                DeleteByQueryAction.INSTANCE.newRequestBuilder(client)  
                    .filter(queryBuilder)   
                    .source("index")                                    
                    .get();                                               
          
        long deleted = response.getDeleted(); 

然后就是根据主键去更新es信息,其中,没有出现在field里面去更新的,不覆盖原有值。

UpdateResponse  response = ElasticsearchConfig.client.prepareUpdate("index", "type", "主键id")
            .setDoc(XContentFactory.jsonBuilder() 
                    .startObject()
                    .field("业务字段1", "2")
                    .field("业务字段2", "1")  
                    .endObject()).execute()  
            .actionGet();

 

ElasticSearch Java Api-5.x删除和更新索引数据

标签:span   creat   tee   获取   instance   index   clust   col   string   

原文地址:https://www.cnblogs.com/huch/p/9121575.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!