使用Spring Data Elasticsearch设置不同的_id和id字段

问题描述 投票:0回答:1

我知道Spring Data默认将id字段映射到弹性_id。这是重写此行为的某种方法吗?我有一个ID字段来自外部的文档,由于向后兼容,我不想更改其名称。但是当我有多个具有相同ID(不是唯一字段)的文档时,我必须支持这种情况所以我想让Elastic生成_id字段是唯一的并设置自己的ID有关如何执行此操作的任何想法?

elasticsearch spring-data-elasticsearch
1个回答
0
投票

Spring Data Elasticsearch通过@Id批注或属性名称(如果是iddocument来标识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的版本。

© www.soinside.com 2019 - 2024. All rights reserved.