问题:
如果我搜索“iphone”,我会得到 400 个产品结果,并且我的产品类别聚合会返回结果集中的前 3 个类别。
这些类别包括智能手机、手机壳和手机配件。
如果我搜索“iphone 6”,我会得到 1400 个结果,因为额外的“6”会返回与更多产品的匹配项。产品类别聚合现在返回所有这些结果的前 3 个类别。
前 3 大产品类别现在是从电缆到电脑显示器的所有产品。
我需要做的是获取前 100 个结果的前 3 个类别。
我尝试过的:
我试过在顶级类别聚合中使用 top_hits
聚合,但它只返回每个类别中的顶级产品。
像这样:
{
"aggs": {
"product_categories": {
"terms": {
"field": "product_category",
"size": 10,
}
}
"aggs": {
"top-categories": {
"top_hits": {
"size" : 3
}
}
}
}
}
我还尝试创建一个包含子聚合的 top_hits
聚合来获取热门类别,但这也不起作用。
{
"aggs": {
"top-categories": {
"top_hits": {
"size" : 100
}
"aggs": {
"product_categories": {
"terms": {
"field": "product_category",
"size": 3,
}
}
}
}
}
}
谁能帮我解决这个问题?
最佳答案
您可以尝试使用基于 limit
过滤器的 filter
聚合,并将您的 terms
聚合嵌套在其中。
请注意,该限制适用于分片级别(请参阅 documentation)。
但是,这应该可以解决您的问题,查询如下:
{
"aggs": {
"limit_results": {
"filter": {
"limit": {
"value": 100
}
},
"aggs": {
"product_categories": {
"terms": {
"field": "product_category",
"size": 10
}
}
}
}
}
}
关于elasticsearch - 聚合前 N 个结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29125532/