Spring Data Elasticsearch идентифицирует свойство id либо по аннотации @Id
, либо по имени свойства, если это id или документ . Таким образом, возникает конфликт, когда есть и аннотация, и поле с одним из этих имен.
В Spring Data Elasticsearch 4.0 вы можете изменить имя свойства id :
@Document(indexName = "sample-entities")
public class SampleEntity {
@Id
private String autogeneratedId; // (1)
@Field(name = "no-id") // (2)
private String id;
@Field(type = FieldType.Text)
private String message;
// getter/setter omitted for brevity
}
(1) это поле будет использоваться для _id в Elasticsearch и получит автоматически сгенерированное значение из Elasticsearch.
(2) это поле будет называться no-id в Elasticsearch и не будет идентифицироваться как поле id из-за переименования в аннотации @Field
.
Если вы используете Spring Data Elasticsearch 3.2, вам нужно вместо этого ElasticsearchEntityMapper
стандартного, основанного на Джексоне.