gpt4 book ai didi

spring - 如何在Spring的Mongo和Elastic Search之间共享的实体中使用@Transient之类的通用注释?

转载 作者:行者123 更新时间:2023-12-02 23:43:03 26 4
gpt4 key购买 nike

我正在使用Spring Boot,并在Elastic Search数据库和MongoDB数据库之间共享同一实体。以这种方式声明实体:

@Document
@org.springframework.data.elasticsearch.annotations.Document(indexName = "...", type = "...", createIndex = true)
public class ProcedureStep {
...
}
@Document来自此软件包的位置: org.springframework.data.mongodb.core.mapping.Document这可以正常工作,但是我不能使用通用批注仅将 flex 搜索作为目标。例如:
@Transient
private List<Point3d> c1s, c2s, c3s, c4s;
这将从Mongo和Elastic这两个数据库中排除该字段,而我的意图是仅将其应用于Elastic Search。
在使用像这样的Elastic特定注释时,我没有任何问题:
@Field(type = FieldType.Keyword)
private String studyDescription;
我的问题是:
我可以使用什么注释从 flex 搜索中仅排除字段并将其保留在Mongo中?
我不想重写该类,因为我没有要存储的“扁平”结构(主类由其他类的字段组成,其他类本身具有要从Elastic中排除的字段)
非常感谢

最佳答案

假设: ObjectMapper用于序列化/反序列化

My question is: what annotation can I use to exclude a field fromElastic Search only and keep it in Mongo? I don't want to rewrite theclass as I don't have a "flat" structure to store (the main class iscomposed with fields from other classes, which themselves have fieldsI want to exclude from Elastic)


  • 请理解这是选择性序列化的问题。
  • 可以使用JsonViews实现。

  • 示例:
    步骤1:定义2个 View ,ES特定和Mongo特定。
    class Views {
    public static class MONGO {};
    public static class ES {};
    }
    步骤2:注释字段,如下所示。描述为注释:
    @Data
    class Product {
    private int id; // <======= Serialized for both DB & ES Context

    @JsonView(Views.ES.class) //<======= Serialized for ES Context only
    private float price;

    @JsonView(Views.MONGO.class) // <======= Serialized for MONGO Context only
    private String desc;
    }
    步骤3:
    为Spring-Data-ES和Mongo配置不同的对象映射器。
    // Set View for MONGO
    ObjectMapper mapper = new ObjectMapper();
    mapper.setConfig(mapper.getSerializationConfig().withView(Views.MONGO.class));

    // Set View for ES
    ObjectMapper mapper = new ObjectMapper();
    mapper.setConfig(mapper.getSerializationConfig().withView(Views.ES.class));

    关于spring - 如何在Spring的Mongo和Elastic Search之间共享的实体中使用@Transient之类的通用注释?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63751637/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com