Elasticsearhc 更新操作java实现

在使用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
原文:https://blog.csdn.net/qq_35431789/article/details/78653554
版权声明:本文为博主原创文章,转载请附上博文链接!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值