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
相关产品推荐
相关产品推荐

