要不要再翻翻文档呢?

Java代码bulkrequest导入数据丢失

Elasticsearch | 作者 Ljc2746028 | 发布于2019年10月10日 | 阅读数:2834

系统提示:这个人太懒了,什么问题描述都没有写!

已邀请:

Ljc2746028

赞同来自:

IndexRequest request = new IndexRequest("portrait_label_sys", "label", stringMap.get("EMPID")); 
Set<String> keySet = stringMap.keySet(); 
HashMap<String, Object> insertRequest = new HashMap<>();HashMap<String, Object> object = new HashMap<>();
 object.put("qz",""); 
object.put("dm",""); 
object.put("mc","");
 ArrayList<Object> list = new ArrayList<>(); 
list.add(object);
 insertRequest.put(key,list); 
request.source(insertRequest);
 

bulkRequest.add(request); bulkRequest.timeout(TimeValue.timeValueMillis(2)); bulkRequest.timeout("2m"); bulkRequest.setRefreshPolicy(WriteRequest.RefreshPolicy.WAIT_UNTIL); bulkRequest.setRefreshPolicy("wait_for");
 
client.bulk(bulkRequest, RequestOptions.DEFAULT);
 

Ljc2746028

赞同来自:

之前insertRequest.put(key, new ArrayList<object>) 数据可以正常导入,后来需求是传入带属性的空对象集合,200W条数据智能插入9W条,有没有大佬帮忙看看原因

core_wzw - 某AILab搜索技术负责人

赞同来自:

你这么操作插不进数据很正常啊,ES插数据前要求你在Mapping里定义字段(你提到的属性),你没有在mapping里对应新增"qz"、"dm"、"mc"字段,自然插不进去。
还有,insertRequest.put只是在组装数据而已,你上面那么操作,insertRequest里也是有新增字段/属性。client.bulk才是插入操作,这时候由于ES mapping里没有新增字段对应,bulk插入失败。
 

要回复问题请先登录注册