关于java API操作elasticsearch 实时更新的一些问题及解决

在使用ES进行更新时遇到的实时刷新文档问题,目前ES并未提供根据具体参数修改对应文档,几乎所有更新修改的方法都是通过获取想要修改对象的ID来更新对应文档。

网上也基本没有这方面的解决方法,话不多说,直接上代码……

@Override
	public JSONObject XXX(String userName, String userId, String Status) throws Exception {
		//username是用户名,这里拿来做修改操作记录,userId是用户的id,Status是要修改的字段
                BoolQueryBuilder countryQuery = new BoolQueryBuilder();
		countryQuery.must(QueryBuilders.termsQuery("userId", userId));
		SearchResponse  searchResponse  = ESConfigUtil.client
				.prepareSearch("demo")
				.setTypes("demo")
				.setQuery(countryQuery)//查询用户ID,获取到该用户的对应文档
				.setSearchType(SearchType.QUERY_THEN_FETCH)
				.addSort("Time", SortOrder.DESC)//排序
				.setSize(10000)//es默认是只返回十条json格式的文档,设置返回的数量即可
				.execute()
				.actionGet();
		
		SearchHits hits = searchResponse.getHits();
		JSONObject jsonResult = new JSONObject();
		for (SearchHit hit : hits) {
			String indexId = hit.getId();//这里获取到对应的文档ID
			JSONObject jsonObject = JSONObject.parseObject(hit.getSourceAsString());
			
			//更新es
			UpdateRequest updateRequest = new UpdateRequest("demo", "demo", indexId);
			String dealTime = DateUtil.formatDate(new Date());
			String dealTimeT = DateUtil.formatString(dealTime, "yyyy-MM-dd'T'HH:mm:ss");
			updateRequest.doc(XContentFactory.jsonBuilder()
				.startObject()
				.field("Status",Status)
				.field("dealUser",userName)
				.field("dealTime",dealTime)
				.endObject())
				.refresh(true)//更新并不是实时的,如果前端使用更新修改操作时,
                                  //api中不设置刷新文档,会导致更新后需要显示的实时会数据缺失
                                  //所以需要刷新文档来保证更新修改数据后是实时刷新
					.retryOnConflict(5);
			ESConfigUtil.client.update(updateRequest).actionGet();
			}
		jsonResult.put("result", "成功");
		return jsonResult;
	
	}

这是的java api操作es时实时更新的解决方法,还有其他方法,就不写出来了,基本都是同一个思路,欢迎留言讨论,需要转载请注明出处CSDN,谢谢!

ps:2018年8月18日16:06:30 修改注释说明

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值