Установите разные поля _id и id с помощью Spring Data Elasticsearch - PullRequest
0 голосов
/ 26 мая 2020

Я понимаю, что Spring Data по умолчанию сопоставляет поле id с elasti c _id. Это способ изменить такое поведение? У меня есть документ с полем id, который пришел извне, и я не хочу менять его имя из-за обратной совместимости. Но я должен поддерживать сценарий, когда у меня есть несколько документов с одним и тем же идентификатором (это не уникальное поле). Поэтому я хочу, чтобы elasti c сгенерировал поле _id, чтобы оно было уникальным и установило свой собственный идентификатор. Любые идеи о том, как это сделать. ?

1 Ответ

1 голос
/ 26 мая 2020

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 стандартного, основанного на Джексоне.

...