当前位置: 首页 > 知识库问答 >
问题:

有没有办法强迫spring在映射中不使用/创建“_class”字段?

汝臻
2023-03-14

在生产服务器上,我们得到了Elasticsearch的映射,动态设置为strict。目前,我们使用rest级别的客户端与Elastisearch进行通信,但是,我们希望迁移到spring data elasticsearch。不幸的是,spring数据似乎强制使用_类或@TypeAlias,这也会干扰映射本身。有没有办法在没有_class或@TypeAlias的情况下使用spring数据?

共有2个答案

丌官远
2023-03-14

目前这是不可能的。这是一个悬而未决的问题。

编辑25.04.2021:

此功能将从下一个版本(4.3)开始提供。

公羊俊德
2023-03-14

好的,我已经找到了一个解决方法。

当elasticsearch模型使用继承时,请注意使用它。

要解决此问题,请创建如下类:

public class CustomMappingEsConverter extends MappingElasticsearchConverter {

public CustomMappingEsConverter(MappingContext<? extends ElasticsearchPersistentEntity<?>, ElasticsearchPersistentProperty> mappingContext, GenericConversionService conversionService) {
    super(mappingContext, conversionService);
}

@Override
public Document mapObject(@Nullable Object source) {
    Document target = Document.create();
    if (source != null) {
        this.write(source, target);
    }
    target.remove("_class"); // << workaround to remove those _class field in elasticsearch
    return target;
    }
}

然后注册bean:

@Configuration
public class MappingEsConfiguration {

    @Bean
    @Primary
    public CustomMappingEsConverter CustomMappingElasticsearchConverter(MappingContext<? extends ElasticsearchPersistentEntity<?>, ElasticsearchPersistentProperty> mappingContext,
                                                                        GenericConversionService genericConversionService) {
        return new CustomMappingEsConverter(mappingContext, genericConversionService);
    }
}

在这些更改之后,我可以使用spring数据,而无需额外的field_类。

 类似资料:
  • 问题内容: 我想在Python中使用PhantomJS。我用谷歌搜索了这个问题,但是找不到合适的解决方案。 我发现 可能是一个不错的选择。但是我无法通过一些争论。 使用可能是目前合适的解决方案。我想知道是否有更好的解决方案。 有没有办法在Python中使用PhantomJS? 问题答案: 在python中使用PhantomJS的最简单方法是通过Selenium。最简单的安装方法是 安装NodeJS

  • 我想在Python中使用PhantomJS。我谷歌了这个问题,但找不到合适的解决方案。 我发现可能是一个不错的选择。但我无法向它传递一些论据。 使用目前可能是一个合适的解决方案。我想知道是否有更好的解决办法。 有没有办法在Python中使用PhantomJS?

  • 我试图找到一个更好的解决方案,以防止Hibernate代理初始化时,通过MapSTRt将实体映射到响应DTO。 我一直在将我们的代码库转换为使用ModelMapper中的MapStruct。如果我想用ModelMapper完成我的要求,我可以做如下简单的事情: 自定义getter方法允许我检查是否已经从数据库中获取了字段,以避免N 1次初始化。 它看起来像: 我不能简单地覆盖普通的getter,因

  • 我有一个非常简单的练习,我注册客户端名称(字符串),我使用数组来做到这一点,所以当我添加一个新的我将使用另一个辅助数组,然后增加原来的长度,或者我将使用System.array复制,有没有其他方法,逐渐增加数组长度,因为你需要添加元素到该数组,不涉及辅助数组?

  • 问题内容: 有没有办法在Linux中创建用户定义的信号?我的信号(信号号)应该与任何现有信号号都不匹配。 换句话说,我想创建自己的唯一信号,该信号将由我的处理程序注册并捕获。 可能吗?如果是,怎么办? 提前致谢。 问题答案: 您无法添加或注册自己的SIGWHATEVER。 请参阅,它是固定大小。见熊陷阱。

  • 问题内容: 我想创建类似 可以用HTML5完成吗?我知道我可以做到 但它的可读性很差:( 问题答案: 您可以在浏览器中使用自定义标签,尽管它们不是HTML5请参阅自定义元素是否有效?和HTML5规范。 假设您要使用名为的自定义标记元素 。这是你应该做的… 步骤1 在CSS样式表中标准化其属性(请考虑将CSS重置)-示例: 第2步 要使其在旧版本的Internet Explorer中运行,您需要将此