解决:elasticsearch 更新报错:The number of object passed must be even but was [1]

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. 以上报错即消失。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章