我与人有指数。我想检索总共100个人(根据多个过滤器),但最终每个位置最多要强加3个人。
例如
索引:
| name | location |
|---------|----------|
| Frodo | Shire |
| Sam | Shire |
| Merry | Shire |
| Pippin | Shire |
| Boromir | Gondor |
| Faramir | Gondor |
查询的结果应类似于: Frodo,Sam,Merry,Boromir,Faramir
答案 0 :(得分:2)
我认为不可能完全得到想要的东西。实质上,您是在location字段上进行分组依据(术语汇总)。由于无法确切知道您有多少个位置,因此组的数量是无限的。因此,如果有101个组,并且每个组返回一个名称,那么您将获得101个结果。而且,如果我们要筛选出100个最大结果,我们应该丢弃哪个组?随机吗?
也就是说,您可以获得{em> x 位置最高的位置,但位置可以按降序排列,尽管您可以change the sorting order。 33个位置存储桶,每个存储桶3个结果是99 ...足够接近吗?
因此,使用terms aggregation和嵌套的top hits aggregation
,对于33个位置,每个位置最多可获得3个结果GET lotr/_search?size=0
{
"aggs": {
"location": {
"terms": {
"field": "location",
"size": 33
},
"aggs": {
"name": {
"top_hits": {
"size": 3,
"_source": {
"includes": ["name"]
}
}
}
}
}
}
}