在当前项目中,我正在使用带有ES 5.5.0的Elasticsearch Spring Data(3.0.9),并且正在研究父子关系的用法(更具体而言,我正在测试哪种方法更好[性能]-嵌套对象或父子关系]。这就是我所拥有的
父实体:
@Document(indexName = "testIndex", type="parentItem", createIndex = false)
public class ParentItem {
@Id
private String id;
@Field(type = FieldType.Text)
@JsonProperty("value")
private String value;
// getters and setters
}
子实体:
@Document(indexName = "testIndex", type="childItem", createIndex = false)
public class ChildItem {
@Id
private String id;
@Field(type = FieldType.Keyword, store = true)
@Parent(type = "parentItem")
private String parentId;
@Field(type = FieldType.Text)
@JsonProperty("value")
private String value;
// getters and setters
}
然后我有一个简单的存储库类(没有主体只是扩展ElasticsearchRepository
),而我只是在创建像这样的父子对
ParentItem parent = createParent(); // creating parent instance
ChildItem child = createChild(); // creating child instance
child.setParentId(parent.getId());
,使用存储库保存/编制索引后,该文件将被存储到ES节点-briliant:)
现在的问题是:Spring Data中是否有可能将子对象保留在父实体中,并在获取父对象期间像
那样急于加载此子对象@Document(indexName = "testIndex", type="parentItem", createIndex = false)
public class ParentItem {
@Id
private String id;
@Field(type = FieldType.Text)
@JsonProperty("value")
private String value;
// can I do anything like this?
// @WhatAnnotation?
private ChildItem child;
// getters and setters
}
或者以其他方式-渴望将父实例“加入”孩子?
@Document(indexName = "testIndex", type="childItem", createIndex = false)
public class ChildItem {
@Id
private String id;
@Field(type = FieldType.Keyword, store = true)
@Parent(type = "parentItem")
private String parentId;
@Field(type = FieldType.Text)
@JsonProperty("value")
private String value;
// can I do anything like this?
// @WhatAnnotation?
private ParentItem parent;
// getters and setters
}
Spring Data中是否有类似的东西?还是我需要实现自己的机制?
另一个问题是,在保存这些文档期间,我只需要使用存储库对ES进行两次“调用”即可。所以回到 creating 示例-我还需要做
ParentItem parent = createParent(); // creating parent instance
ChildItem child = createChild(); // creating child instance
child.setParentId(parent.getId());
parentRepository.index(parent);
childRepository.index(child);
这意味着它不能在一次交易中完成。这对性能似乎不是很好吗?
ES Spring Data是否支持类似的功能?老实说,官方文档并没有帮助-可用的示例也没有显示我刚刚实现的更多内容:(