问题
我们在使用spring-data-elasticsearch中的ElasticsearchTemplate类中的index方法去更新
elasticsearch数据库中的同样数据的时候,如果你发现了index()方法之后发现数据是增加了,
而不是更新了数据库中原来的那条数据,而是多了一条数据,原来的老数据还在,那么你可以看下你
的es实体类中是否设置了id,version,如果设置了,那就证明是这两者同时来控制数据的不重复,那么
你的IndexQuery一定要withVersion(),withVersionType()(老版本中有,新版本中已取消),withId(),
设置之后数据就可以同步更新了,当然你也可以使用save()方法,但是这个方法效率没有index()快,
因为save()方法内部就是调用了inddex().并且refresh()。源码如下:
public <S extends T> S save(S entity) {
Assert.notNull(entity, "Cannot save 'null' entity.");
this.elasticsearchOperations.index(this.createIndexQuery(entity));
this.elasticsearchOperations.refresh(this.entityInformation.getIndexName());
return entity;
}
private IndexQuery createIndexQuery(T entity) {
IndexQuery query = new IndexQuery();
query.setObject(entity);
query.setId(this.stringIdRepresentation(this.extractIdFromBean(entity)));
query.setVersion(this.extractVersionFromBean(entity));
query.setParentId(this.extractParentIdFromBean(entity));
return query;
}
index()里面设置id,version()版本的原因在这!