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);
.... 其他的都一样了
博客讲述了在2020年11月19日更新部分代码时遇到的问题。原代码在执行更新操作时会报错,经过查询源码后给出了改良版本,但未详细说明改良后的具体代码。代码涉及Elasticsearch的文档更新操作。
1959

被折叠的 条评论
为什么被折叠?



