同意しました。今後のリリースで改善する予定のドキュメントが不足しています。
春のデータelasticsearch stackoverflowについて質問がある場合は、おそらく回答を得るための最良の方法ではありません(新しいスレッドについて通知されないため)、質問/クエリ用の別のGoogleグループがあります https://groups.google.com/forum/ #!forum/spring-data-elasticsearch-devs
上記のエンティティで正確に何を達成しようとしているのかわからなくても、以下のようにサンプルの親子エンティティの例を示すことができます
@Document(indexName = "parent-child", type = "parent-entity")
public class ParentEntity {
@Id
private String id;
@Field(type = FieldType.String, index = FieldIndex.analyzed, store = true)
private String name;
// setter/getter
public ParentEntity() {
}
public ParentEntity(String id, String name) {
this.id = id;
this.name = name;
}
}
@Document(indexName = "parent-child", type = "child-entity")
public class ChildEntity {
@Id
private String id;
@Field(type = FieldType.String, store = true)
@Parent(type = "parent-entity")
private String parentId;
@Field(type = FieldType.String, index = FieldIndex.analyzed, store = true)
private String name;
public ChildEntity() {
}
public ChildEntity(String id, String parentId, String name) {
this.id = id;
this.parentId = parentId;
this.name = name;
}
}
// 親のインデックス作成 (リポジトリを使用するなど、他の多くの方法でインデックスを作成できます)
ParentEntity parent1 = new ParentEntity("parent1", "First Parent");
IndexQuery parentIndex1 = new IndexQuery();
parentIndex1.setId(parent1.getId());
parentIndex1.setObject(parent1);
elasticsearchTemplate.index(parentIndex1);
ParentEntity parent2 = new ParentEntity("parent2", "Second Parent");
IndexQuery parentIndex2 = new IndexQuery();
parentIndex2.setId(parent2.getId());
parentIndex2.setObject(parent2);
elasticsearchTemplate.index(parentIndex2);
// インデックスの子
ChildEntity child1 = new ChildEntity("child1", parent1.getId(), "First");
IndexQuery childIndex1 = new IndexQuery();
childIndex1.setId(child1.getId());
childIndex1.setObject(child1);
childIndex1.setParentId(child1.getParentId());
elasticsearchTemplate.index(childIndex1);
ChildEntity child2 = new ChildEntity("child2", parent1.getId(), "Second");
IndexQuery childIndex2 = new IndexQuery();
childIndex2.setId(child2.getId());
childIndex2.setObject(child2);
childIndex2.setParentId(child2.getParentId());
elasticsearchTemplate.index(childIndex2);
// 検索
親/子エンティティの検索中に、 has children、has parent、およびtop childrenクエリを含むいくつかの使用可能なオプションがあります。
QueryBuilder query = topChildrenQuery("child-entity", QueryBuilders.termQuery("name", child1name.toLowerCase()));
SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(query).build();
List<ParentEntity> parents = elasticsearchTemplate.queryForList(searchQuery, ParentEntity.class);
この小さな例によって、親子の使い方の基本的な理解が得られることを願っています。詳細については、ParentChildTestsをご覧ください。
さらに質問がある場合は、お気軽にお問い合わせください。