在索引中我有两个文档示例:Product和Sku。在产品文档中,我已将所有与产品相关的属性(如产品名称,产品品牌和索引文档)编入索引,我们已将所有sku属性(如价格,库存)编入索引。
我们将有许多skus映射到产品,反之亦然。所以我们在Product和sku之间创建了父子关系。我们将Product作为Parent,Skus被映射为Product的子项。问题是当我们查询产品或sku时,我们只获得与产品相关的属性(名称和品牌)或仅获得与sku相关的属性(价格和库存)。
但在我们的情况下,当我们查询时,我们需要获得所有Product和sku相关属性(名称,品牌,价格和库存)。当我们查询子项时,如何获取父文档的所有属性(或)当我们查询Product时如何获取所有子sku及其属性。
是否可以在Elasticsearch中使用。请帮忙。谢谢。 我正在使用Elasticsearch版本2.3.1。
答案 0 :(得分:1)
在我之前的项目中,我们遇到了同样的问题,即父项(目录项)和子项(配置的产品 - 用颜色指定的项目......等)。正如khituras所提到的,您可以应用hasParent-和hasChild-queries,但它们不会返回带子项的父项的组合结果集...(link)。
您可能应该尝试InnerHits-queries,这似乎是promising。
您的数据集是否经常更改,因此您可以从父子关系中受益,因为父文件或子文档经常更改?否则,您可以考虑将父文档嵌入到每个孩子中。 Elasticsearch带有基于文档的数据模型,因此在使用父子关系时必须注意可能存在的缺陷。在我的项目中,我们应用了嵌入式方法,因为我们未能对子文档的父信息应用聚合。
干杯,多米尼克