我正在尝试获取一组文档上使用的所有标签的唯一计数。为了做到这一点,并在bucket中返回json(基数不同时返回json和count),我需要编写一个管道查询。
我的查询只完成了一半,但是我遗漏了第二部分,即计算标签所在的桶的数量。
这是我的疑问
{
"size":0,
"aggs" : {
unique_count : {
"composite" : [
"metadataId" : {
"terms" :{"field" : "document.metadata.id"}
},
"label" : {
"terms" :{"field" : "document.label"}
}
]
}
}
}
这就产生了
...
"buckets" : [
{
"key" : {
"metadataId" : "1",
"label" : "label one"
},
"doc_count" : 2
},
{
"key" : {
"metadataId" : "2",
"label" : "label one"
},
"doc_count" : 1
},
{
"key" : {
"metadataId" : "3",
"label" : "label three"
},
"doc_count" : 3
}
]
...
我面临的问题是每个bucket都被认为是唯一的,而唯一计数的总和就是我想要返回的值。例如,在上面的bucket中,标签“label one”包含在两个bucket中,因此它的doc_count应该是2,而“label three”的doc_count应该是1。
在管道的最后一个阶段之后,我希望看到以下输出:
"buckets" : [
{
"label" : "label one"
"doc_count" : 2
},
{
"label" : "label three"
"doc_count" : 1
}
]
我试过各种方法,但都不能得到我需要的输出。有人能给我指出正确的方向吗?
1条答案
按热度按时间smdncfj31#
尝试使用嵌套术语聚合,其中第一级聚合位于label上,第二级聚合位于metadataId字段上。
作为输出,您将获得标签存储桶,其中
key
作为标签值,doc_count
具有与该标签匹配的文档计数。每个标签存储桶将具有元数据ID的嵌套存储桶,其中key
作为元数据ID值,doc_count
具有与该标签和元数据ID匹配的文档计数。