gpt4 book ai didi

elasticsearch - elasticsearch通过子聚合doc_count排除聚合桶

转载 作者:行者123 更新时间:2023-12-02 23:39:57 25 4
gpt4 key购买 nike

我认为使用查询进行解释会更容易。考虑我的查询:

GET _search
{
"aggs": {
"group_by_app": {
"terms": {
"field": "application"
}
},
"aggs": {
"installs": {
"filter": {
"fquery": {
"query": {
"match": {
"action": "install"
}
},
"_cache": true
}
}
},
"launches": {
"filter": {
"fquery": {
"query": {
"match": {
"action": "launch"
}
},
"_cache": true
}
}
}
}
}
}

这使我得到以下结果:
"aggregations": {
"apps": {
"buckets": [
{
"key": "app1",
"doc_count": 2313,
"launches": {
"doc_count": 0
},
"installs": {
"doc_count": 48
}
},
{
"key": "app2",
"doc_count": 5,
"launches": {
"doc_count": 0
},
"installs": {
"doc_count": 0
}
},
]
}
}

现在,如果您注意到,app2的安装和启动均为0。如果两个子聚合的启动和安装次数均为0,我不希望key =“app2”的存储桶显示在结果中。

我看到了 min_doc_count,想知道是否可以针对我的情况做类似的事情?

[EDIT]:我认为我可以尝试的另一件事是,如果不可以对每个可能的“操作”进行聚合“group_by_app”,则只能通过“action” =“install”或“action” =“发射”。因此,基本上我的意思是,存储桶聚合仅基于“action” =“launch”或“install”,并且子聚合在查询中基本相同。我可以对存储桶聚合执行min_doc_count,以不显示子聚合结果。但是,聚合只允许一个或多个术语或过滤器,而不能同时使用两者。如果有人可以提出另一种方法来实现这一目标,那将是很大的帮助!

最佳答案

我意识到这并不困难。我可以尝试使用“查询”来限制要聚合的文档,而不必尝试对聚合进行过滤。因此,与其对每个“操作”的所有“应用程序”的所有文档进行汇总,不如对仅具有两个“操作”的所有“应用”的文档进行汇总,即“action” =“install”或“action” =“launch” ”,然后在存储分区聚合上执行min_doc_count = 1,如果“安装”和“启动”子聚合都为0,则不会显示“应用程序”存储分区。

这是完整的查询:

GET _search
{
"query": {
"filtered": {
"filter": {
"bool": {
"must": [
{
"fquery": {
"query": {
"match": {
"action": "install OR launch"
}
},
"_cache": true
}
}
]
}
}
}
},
"aggs": {
"group_by_app": {
"terms": {
"field": "application"
}
},
"aggs": {
"installs": {
"filter": {
"fquery": {
"query": {
"match": {
"action": "install"
}
},
"_cache": true
}
}
},
"launches": {
"filter": {
"fquery": {
"query": {
"match": {
"action": "launch"
}
},
"_cache": true
}
}
}
}
}
}

关于elasticsearch - elasticsearch通过子聚合doc_count排除聚合桶,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23400068/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com