Es 通过javaApi上传数据Long类型丢失精度的问题一次性解决和UpdateRequest的插入和修改

1、需求,通过接口去插入Es数据,有则修改,无则插入

通过关键字 updateRequest.docAsUpsert(true) true 表示无匹配_id是插入数据,false 表示无匹配_id会抛出异常

UpdateRequest updateRequest = new UpdateRequest("索引名","_doc", "_id"));
            String s = JSON.toJSONString(collect);
            String data = jsonLoopRequest(JSONObject.parseObject(s), s);
            updateRequest.doc(data,XContentType.JSON);
            updateRequest.docAsUpsert(true);
            UpdateResponse update = searchClient.update(updateRequest, RequestOptions.DEFAULT);
2、上传数据Long类型丢失精度的问题,解决方法是数据转成JsonString 后给数据拼上双引号
/**
  * 采用递归实现
  * 利用 fastjson 遍历jsonObject
  * String s = JSON.toJSONString(collect);
  * String data = jsonLoopRequest(JSONObject.parseObject(s), s);
  * object 表示
  */
    public  String  jsonLoopRequest(Object object,String data) {
        if(object instanceof JSONObject) {
            JSONObject jsonObject = (JSONObject) object;
            Iterator iter = jsonObject.entrySet().iterator();

            while (iter.hasNext()) {
                Map.Entry entry = (Map.Entry) iter.next();
                Object o = entry.getValue();
                if(o instanceof Long) {
                    data=replaceRequest(entry.getValue().toString(),data);
                } else  if(o instanceof JSONArray) {
                    data=jsonLoopRequest(o,data);
                } else  if(o instanceof  JSONObject) {
                    data=jsonLoopRequest(o,data);
                }
            }
        }
        if(object instanceof JSONArray) {
            JSONArray jsonArray = (JSONArray) object;
            for(int i = 0; i < jsonArray.size(); i ++) {
                data=jsonLoopRequest(jsonArray.get(i),data);
            }
        }
        return data;
    }

    public String replaceRequest(String str,String requestStr){
        if(requestStr.charAt(requestStr.indexOf(str)-1)!='\"'){
        	// replaceAll 防止重复数据漏掉(但是有弊端,待商榷)
            requestStr=requestStr.replaceAll(str,"\""+str+"\"");
        }
        return requestStr;
    }
Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐