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

Posted 胡图咦声

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ElasticSearch Java Api-5.x删除和更新索引数据相关的知识,希望对你有一定的参考价值。

版本背景:

<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删除和更新索引数据的主要内容,如果未能解决你的问题,请参考以下文章

Elasticsearch

如何导入elasticsearch的JAVA API?

java怎么给elasticsearch插入数据

ElasticSearch JVM配置

java SQL查询elasticsearch?

java elasticsearch操作: 连接elasticsearch8.x