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