我知道Spring Data默认将id字段映射到弹性_id。这是重写此行为的某种方法吗?我有一个ID字段来自外部的文档,由于向后兼容,我不想更改其名称。但是当我有多个具有相同ID(不是唯一字段)的文档时,我必须支持这种情况所以我想让Elastic生成_id字段是唯一的并设置自己的ID有关如何执行此操作的任何想法?
Spring Data Elasticsearch通过@Id
批注或属性名称(如果是id或document来标识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)该字段将用于Elasticsearch中的_id,并将从Elasticsearch获取自动生成的值。
((2)该字段在Elasticsearch中将被命名为no-id,由于@Field
批注中的重命名,因此不会被标识为id字段。
如果使用的是Spring Data Elasticsearch 3.2,则需要ElasticsearchEntityMapper
,而不是默认的基于Jackson的版本。