使用 ElasticsearchRepository (Java/Spring-data) 在 ElasticSearch 中保存 JSON 文档

问题描述 投票:0回答:1

我试图在 ElasticSearch 中存储(仅)包含 json 字符串的实体,但希望 json 文档中的字段单独存储在 Elastic 中,而不是作为单个字符串。

我正在使用 ElasticsearchRepository

public interface MyRepository extends ElasticsearchRepository<MyEntity, Long>

并按如下方式设置我的实体:

@NoArgsConstructor
@Getter
@Setter
@Document(indexName = "my-index")
public class MyEntity
{
    @Id
    private Long key;
    private String json;
}

如果 json 对象很简单,我可以重新创建实体中的所有字段并映射到这些字段。示例:

json = "{"key":"123", "name":"Bob", "age":30, ...}"

在 MyEntity 中:

public class MyEntity
{
    @Id
    private Long key;
    private String name;
    private String age;
    // And so on ...
}

我知道这可行,但真正的 json 字符串包含数百个(嵌套)字段,这就是为什么我不想在实体类中重新创建所有这些字段。

我可以在不必写出所有字段并仍然使用

repository.save()
的情况下获得相同的结果吗?

这个相关问题来自2015年。解决方案将json文件传递给'setSource(jsonDoc)',但看起来保存的实体不包含任何json。

非常感谢您的帮助!

java json elasticsearch spring-data
1个回答
0
投票

您可以使用 @Field(type = FieldType.Object) 注释将 JSON 文档存储在 Elasticsearch 中,其中的字段单独索引,而无需在实体类中重新创建所有字段。尝试这个方法;

@NoArgsConstructor
@Getter
@Setter
@Document(indexName = "my-index")
public class MyEntity {
   @Id
   private Long key;

   @Field(type = FieldType.Object)
   private Map<String, Object> json;
}
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.