elasticsearch 学习博客系列<五> ES 中 index-doc 的 更新(java)

原创 2017年06月02日 00:14:59

这一篇我们说一下Java 操作ES 如何进行数据doc更新,同样可分为 单个更新 与 批量更新,和删除的 步骤一样 你首先要进行定位操作 即 获取 docID,然后 再进行操作

定位:indexName+typeName+docId


单个更新:


1通过增加进行覆盖

/**
	 * 更新 单条 -数据 通过id
	 * @param obj
	 */
	public void updateInfo(OwnUsedAsset obj){
		if(obj == null) return;
		boolean exist = EsClientUtil.isExistIndex(name);
		if(exist){
			ESClient client = EsClientUtil.getDefaultDelegateClient();
			QueryBuilder qb = QueryBuilders.termQuery("id", obj.getId());
			SearchResponse respose = client.prepareSearch(name)
			.setQuery(qb)
			.setSize(1)
			.execute().actionGet();
			
			SearchHit[] hits = respose.getHits().getHits();
			if(hits.length > 0){
				
				// 先获取文档ID
				String docId = hits[0].getId();
				
				// 对数据进行更新
				if(obj.getState()!= 2){
					
					obj.setState(1);
				}
				obj.setUpdateTime(System.currentTimeMillis());
				String data = JsonUtil.toJson(obj);
				// 进行操作
				client.prepareIndex(name, name)
					.setId(docId)
					.setSource(data)
					.execute()
					.actionGet();
				
				
			}
		}
	}
这种方式 是 对整个文档进行覆盖更新,那么 如果只改某个字段 该如何操作呢?

2. 更新 文档中 某字段

/**
	 * HashMap<String, Object> editMap = new HashMap<>();
			editMap.put("state", 3);
			editMap.put("actionTime", 666666);
	 * setDoc("actionTime", 10000)
	 * 每次只能改一个,后面的会覆盖前面的
	 * @param docId
	 */
	public void updateDataInField(String docId ,Map editMap){
		boolean flag = EsClientUtil.isExistIndex(name);
		if(flag){
			ESClient client = EsClientUtil.getDefaultDelegateClient();
			
			client.prepareUpdate(name, name, docId)
				.setDoc(editMap)
				.execute().actionGet();
		}
		
	}


批量 更新:

/**
	 * 批量更新 信息
	 * @param downLineID
	 */
	public void bulkUpdateState(Set<String> downLineID ,Map editMap){
		if(downLineID.size() == 0) return;
		boolean flag = EsClientUtil.isExistIndex(name);
		if(flag){
			ESClient client = EsClientUtil.getDefaultDelegateClient();
			BulkRequestBuilder prepareBulk = client.prepareBulk();
			
			for (String docId : downLineID) {
				prepareBulk.add(client.prepareUpdate(name, name, docId).setDoc(editMap));
			}
		
			prepareBulk.execute().actionGet();
			
		}
	}
	/**
	 * 批量更新 信息
	 * @param downLineID
	 */
	public void bulkUpdateState(Map<String,String> downLineID ,Map editMap){
		if(downLineID.size() == 0) return;
		boolean flag = EsClientUtil.isExistIndex(name);
		if(flag){
			ESClient client = EsClientUtil.getDefaultDelegateClient();
			BulkRequestBuilder prepareBulk = client.prepareBulk();
			Set<String> entrySet = downLineID.keySet();
			for (String docId : entrySet) {
				editMap.put("remark", downLineID.get(docId));
				prepareBulk.add(client.prepareUpdate(name, name, docId).setDoc(editMap));
			}
			prepareBulk.execute().actionGet();
		}
		
	}


一般来说这些 也就够了,如果数据量 很大,则注意分段!


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

java 操作ES 增删改查总结

本实例框架采用 nutz+ES,如果 您查找相关知识,请注意过滤不相干的信息 controller 层: package com.test.ownasset.controller; impor...

Java操作Elasticsearch

Java操作Elasticsearch 今天呢,发一篇JAVA操作ES搜索引擎的代码吧! 创建工程就不说了 Maven工程:加入Maven依赖!!! pom.xml ...

elasticsearch 学习博客系列<四> ES 中 index-doc 的 删除(java)

这一篇 我们讲解一下 Java 常用的 删除ES文档 doc 的方法,也是 分为 单个 删除 和 批量删除 删除的时候要进行定位,indexName + typeName + docId 进行 唯一...

elasticsearch 学习博客系列<二> ES 中 index 设置 Mapping(表结构)

通过上一篇 我们了解到ES中的一些概念,回顾一下: 几个基本名词 index: es里的index相当于一个数据库。  type: 相当于数据库里的一个表。  id: 唯一,相当于主键。  n...

Elasticsearch笔记五之java操作es

java操作es集群代码
  • ty4315
  • ty4315
  • 2016-09-04 19:50
  • 19620

罗大柚OpenGL ES教程系列LessonTwo(Part 3):采用VAO和index,绘制一个Cube

同样的, LessonTwo的第三部分我们采用了VAO,但是我们觉得在part 2中那中为创建一个Cube而重复大量顶点数据的方式并不完美,于是我们很自然的想到了用index,part 3就是采用了V...

【ElasticSearch系列】ES插件安装

上篇文章介绍了一下EleasticSearch以及安装,这篇文章继续,将介绍ES的插件安装。 其实最开始我也不知道要安装什么插件,其实也疑惑,为什么ES不将需要的插件集成到自身,这样就能避免很多问题。...

ES缓存fielddata(avoid)、doc values详解(持续更新)

Fielddata(重点) 产生条件:sort、aggs、script 缺点 java heap 造成集群instability的主因之一,the most frequent cause of th...
  • slml08
  • slml08
  • 2016-12-27 20:20
  • 1557

Java项目框架搭建系列(Java学习路线)-博客提纲

前言:已经毕业两年,真是时间飞逝。其实当你在一间公司工作一两年之后,公司用到的开发框架的基本使用你应该都会了。你会根据一个现有项目A复制一下搭建出另外一个类似框架的项目B,然后在项目B上进行业务逻辑开...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)