我的文档的结构如下:
{
"chefInfo": {
"id": int,
"employed": String
... Some more recipe information ...
}
"recipe": {
... Some recipe information ...
}
}
如果厨师有多个食谱,则每个文档中嵌套的chefInfo
块将相同。我的问题是我想对文档的chefInfo
部分中的字段进行汇总。但是,这没有考虑到chefInfo
块是重复的事实。
因此,如果ID为1的厨师在5个食谱上,而我正在employed
字段上进行汇总,则该特定厨师将代表汇总中的5个计数,而我希望他们只算一个。
我考虑过在Chef_id上进行top_hits
聚合,然后想对所有存储桶进行子聚合,但是我不知道如何对所有存储桶的结果进行计数桶。
我想做什么?
答案 0 :(得分:5)
为了具有弹性,每个文档本身都是唯一的。在您的情况下,您想根据不同的字段(此处为chefInfo.id
)定义唯一性。要根据此字段查找唯一计数,您必须使用cardinality aggregation。
您可以按以下方式应用聚合:
{
"aggs": {
"employed": {
"nested": {
"path": "chefInfo"
},
"aggs": {
"employed": {
"terms": {
"field": "chefInfo.employed.keyword"
},
"aggs": {
"employed_unique": {
"cardinality": {
"field": "chefInfo.id"
}
}
}
}
}
}
}
}
在结果employed_unique
中,您会得到期望的计数。