Es 通过javaApi上传数据Long类型丢失精度的问题一次性解决
Es 通过javaApi上传数据Long类型丢失精度的问题一次性解决和UpdateRequest的插入和修改
·
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;
}
更多推荐
所有评论(0)