1. 錯誤的代碼寫法:
@Autowired
private ElasticsearchOperations esOperations;
public void updateAxxxData(List<AxxxModel> axxxs) {
for (AxxxModel al : axxxs) {
UpdateQuery update = new UpdateQuery();
update.setIndexName("coll_axxxm_sxxxxxxx_es");
update.setType("coll_axxxm_sxxxxxxx_es");
UpdateRequest request = new UpdateRequest();
request.doc(al);
update.setUpdateRequest(request);
esOperations.update(update);
}
}
2. 運行後報錯:
java.lang.IllegalArgumentException: The number of object passed must be even but was [1]
3. 報錯行爲: request.doc(al);
4. 把對象改爲用Map,循環中代碼調整爲:
UpdateQuery update = new UpdateQuery();
update.setIndexName("coll_axxxm_sxxxxxxx_es");
update.setType("coll_axxxm_sxxxxxxx_es");
UpdateRequest request = new UpdateRequest();
Map<String, Object> alMap = Maps.newHashMap();
alMap.put("xxx_time", al.getXxx_time());
alMap.put("xxx_id", al.getXxx_id());
alMap.put("fxxx_id", al.getFxxx_id());
request.doc(alMap);
update.setUpdateRequest(request);
esOperations.update(update);
5. 以上報錯即消失。