2020-11-19 解决了一个
ElasticsearchRestTemplate restTemplate; 更新的问题
我想要更新
public class ArticleDO {
@Id
String id;
/**
*
*/
@Field(type = FieldType.Keyword)
Long userId;
@Field(type = FieldType.Object)
List<ImageDO> images;
....
}
public class ImageDO
{
String originUrl;
Integer width;
Integer height;
...
}
部分的代码
Document document = Document.create();
images-不为空
document.putIfAbsent("images", images);
document.setId(id);
UpdateQuery build = UpdateQuery.builder(id).withDocument(document) .withScriptedUpsert(true) .build();
UpdateResponse update = restTemplate .update(build, IndexCoordinates.of(ArticleDO.INDEX_NAME));
这样写就会报错
经过查询源码之后
改良的版本:
List<Map<String, Object>> imageMap = Lists.newArrayList(); for (ImageDO image : images) { //这一步转换成map的意思 Map<String, Object> stringObjectMap = QueryToMapUtils.toMap(image); imageMap.add(stringObjectMap); } document.putIfAbsent("images", imageMap);
.... 其他的都一样了