解決: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. 以上報錯即消失。

 

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