繁体   English   中英

Spring 引导(2.2.X) - Spring 弹性搜索(6.8.X) - 不同的 JSON 属性和字段名称

[英]Spring Boot(2.2.X) - Spring Elastic Search(6.8.X) - Different JSONProperty and Field Name

将 Spring 从 2.1.X 引导到2.2.X并将弹性搜索从6.3.X更新到 6.8.X

得到映射异常,解决映射异常,将文档变量重命名为 myDocument。

现在elasticSearchRepo.SaveAll(objectTosave)值不会保留在文档中。 文档中存在其他属性,如 id、类别。

有什么办法可以有不同的 fieldName 和 jsonProperty?

import org.springframework.data.elasticsearch.annotations.Document;
import org.springframework.data.elasticsearch.annotations.Field;

import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonInclude.Include;
import com.fasterxml.jackson.annotation.JsonProperty;

import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import lombok.ToString;

@NoArgsConstructor
@Data
@EqualsAndHashCode
@ToString
@Document(indexName="my_document_index", type="information", createIndex=false)
@JsonIgnoreProperties(ignoreUnKnown = true)
@JsonInclude(Include.NON_NULL)
public class MyInstance
{
  @Field
  private String id;

  @Field
  private String category;

  @Field
  @JsonProperty("document")
  private MyObject mydocument;
  
  /** JSON Creator **/
  @JsonCreator
  public MyInstance(@JsonProperty("id") id, @JsonProperty("category") category,
         @JsonProperty("document") mydocument) 
  {
     this.id = id;
     this.category = category;
     this.mydocument = mydocument;
  }
}

不需要用@Field注释id属性,你应该把@Id放在那里。 虽然这不是必需的,但由于属性的名称就足够了,它可以更清楚地说明它是什么。

至于mydocument属性没有被持久化:它在 Elasticsearch 中,名称为mydocument @JsonProperty("document")在 Jackson 映射时,在 JSON 中定义此属性的名称,例如当您通过 Z50780F47F6839D47D60BC4555EE00C3F 端点获取此属性时。 重命名为mydocument会禁止该属性被解释为 id 属性的错误。

但我认为您也希望在 Elasticsearch 中作为文档 您可以通过在@Field注释中设置来定义 Elasticsearch 中的属性名称:

@Document(indexName="my_document_index", createIndex=false)
public class MyInstance
{
    @Id
    private String id;

    @Field
    private String category;

    @Field(name = "document")
    @JsonProperty("document")
    private MyObject mydocument;

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM