当前我们正在基于给定的id更新插入文档。但是,我们最近进行了一些更改,即id将自动生成,并且我们创建了一个新字段“main_id”,它将作为主id。我们如何按“main_id”而不是按id使用更新插入?下面是示例实体:
@Data
@Document(indexName = "person")
public class Person {
@Id
@JsonIgnore
private String id;
private String mainId;
private String name;
}
目前,我们的方法实现如下:
public void bulkCreateOrUpdate(final List<T> objectList) {
List<UpdateQuery> updateList = new ArrayList<>();
for (T st: objectList) {
UpdateQuery updateQuery = UpdateQuery.builder(st.getId())
.withDocument(this.operations.getElasticsearchConverter().mapObject(st))
.withDocAsUpsert(true)
.build();
updateList.add(updateQuery);
}
this.operations.bulkUpdate(updateList,
this.operations.getIndexCoordinatesFor(this.entityClass));
}
1条答案
按热度按时间svgewumm1#
Elasticsearch的update API需要文档的id。
还有update by query,它也可以在Spring Data Elasticsearch中使用,但是在那里你不能传入一个新的或更新的文档,而只能传入一个脚本来进行更新。
因此,如果不使用id,就无法直接进行更新。