让我们说我有很多ElasticSearch文档,如下面给出的示例:
{
"Tagname": [
"Veniam"
],
"Title": [
"Occaecat do. Eu ut."
]
},
...
...
...
{
"Tagname": [
"Anim"
],
"Title": [
"Consectetur dolor consectetur eu."
]
},
...
...
...
{
"Tagname": [
"Aliqua"
],
"Title": [
"Culpa in ut ut. Enim in excepteur eiusmod."
]
}
...
...
...
在这里,我们假设Tagname
是每个Title
落下的标记的名称。并且Tagname
被映射为keyword
,这样当我在Tagname.keyword
上聚合时,我会得到3个独特的TagName
桶(Veniam,Anim,Aliqua等)。 ..)。在我的情况下,假设我们没有固定数量的唯一TagName
,它可能会动态更改。因此,我们无法在搜索查询中假设一个唯一TagName
的静态列表。
我现在想要实现的是在每个存储桶下获得前5个Title
值。 (到目前为止,排序或排序任何排序都不是必需的,随机5也可以。但是对排序的解释会很有启发。)
答案 0 :(得分:0)
我建议使用以下聚合。我使用了100的任意大小,但您可以使用Tagname
字段的基数替换它,以确保每个值Tagname
获得一个存储桶。然后,您有一个嵌套的top_hits
聚合,它将为每个存储桶返回5个文档。
{
"size": 0,
"aggs": {
"tags": {
"terms": {
"field": "Tagname.keyword",
"size": 100
},
"aggs": {
"latest": {
"top_hits": {
"size": 5
}
}
}
}
}
}