首页 > 解决方案 > @Field 注释属性不适用于动态映射功能

问题描述

我们正在运行 spring-data 4.1.0,Spring 5.2.10

这可能听起来很奇怪,但这是场景(es 的状态没有索引/映射):

启动容器,第一件事spring-data-es就是使用所有映射创建索引。是的!但如果该过程由于某种原因失败,则不会创建映射。好的可以理解。

之后(映射失败)你保存一个实体..它似乎 spring/es 将动态地开始为该实体生成映射,因为它正在被保存。酷..是的!但是......一些@Field 属性没有进入映射。IE 的 copy_to 属性。

我不知道所有动态映射是如何工作的,是在 java 端还是 es 端。我猜如果动态映射发生在 es 端,那么这种行为是有道理的。但我想我注意到其他@Field属性进入映射,如字段类型和数据转换的东西。

这是预期的行为吗?我想我在想@Field无论映射是如何创建的,注释属性都应该进入映射。

标签: javaspring-dataspring-data-elasticsearch

解决方案


你的假设是正确的。

仅当@Field使用 Spring Data Elasticsearch 编写映射时才考虑注释 - 在存储库初始化时或IndexOperations调用接口中的相应方法之一时。

当索引创建映射失败时,它不会在之后自动完成。并且它不会在下一次应用程序启动时完成,因为索引已经存在。

当实体存储在未定义映射的索引中时,Elasticsearch 会自动创建映射,因为 Elasticsearch 对 Spring Data Elasticsearch 注释一无所知。

当无法存储映射时,您是否在应用程序中遇到错误?


推荐阅读