我的products
索引带有categories
嵌套字段,其中包含产品所分配的所有类别,以及它们的优先级。
我需要编写一个查询,返回给定类别ID列表的顶级产品,并按父类别对这些产品进行分组。
由于产品可以是2个或更多类别,因此我需要显示仅在与搜索查询匹配的类别下分组的产品。
这是我到目前为止所得到的:
GET products/_search
{
"query": {
"nested": {
"path": "categories",
"query": {
"terms": {
"categories.id": [1,2,3]
}
},
"inner_hits": {}
}
},
"aggs": {
"category_group": {
"terms": {
"script": "...return the category to group by, depending on the matched nested category..."
},
"aggs": {
"top_products": {
"top_hits": {}
}
}
}
},
"size": 0
}
我遇到的问题是构建分组类别存储桶的术语聚合需要知道哪个嵌套类别与搜索查询匹配。看起来这些信息在结果中的inner_hits
数组中可用,但我在术语聚合脚本字段中需要它。
所以,我想我的问题是 - 这有可能吗?或者还有其他方法可以获得理想的结果吗?
P.S:还有一些复杂的问题是某些类别不能用于分组,在这种情况下,应该使用它们的父类别,但这是我可以在脚本中处理的。