You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Elasticsearch 7.17.3中Java嵌套数组子字段实体类创建问题

正确实现Elasticsearch嵌套类型的Java实体类

针对你的需求,需要将comment字段从String[]改为嵌套对象的列表,具体实现如下:

1. 创建Comment嵌套实体类

定义对应comment子字段的实体类,匹配ES中的嵌套字段结构:

public class Comment {
    @Field(name = "c_id", type = FieldType.Keyword)
    private String cId;

    @Field(name = "feed_id", type = FieldType.Keyword)
    private String feedId;

    @Field(name = "c_text", type = FieldType.Text)
    private String cText;

    // 生成无参构造、有参构造,以及getter、setter方法
}

2. 修改Feed实体类

将原有的String[] comment替换为List<Comment>,保持Nested类型注解:

@Document(indexName = "feeds")
public class Feed {
    @Id
    private String feed_id;

    @Field(type = FieldType.Text, name = "title")
    private String title;

    @Field(type = FieldType.Text, name = "body")
    private String body;

    @Field(type = FieldType.Nested, name = "comment")
    private List<Comment> comment;

    // 生成无参构造、有参构造,以及getter、setter方法
}

关键说明

  • 原代码中String[]无法匹配ES的nested类型,因为nested字段存储的是对象数组而非字符串数组,必须用Java对象列表对应。
  • 通过@Field(name = "...")可以实现Java驼峰命名与ES下划线命名的映射。
  • Elasticsearch 7.17.3版本完全兼容这种嵌套实体类的映射方式,Spring Data Elasticsearch会自动处理嵌套对象的序列化与反序列化。

内容的提问来源于stack exchange,提问作者Ali

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 14:00:36