我试图在 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。
非常感谢您的帮助!
您可以使用 @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;
}