gpt4 book ai didi

elasticsearch - 合并/展平子aggs到主agg

转载 作者:行者123 更新时间:2023-12-03 02:13:54 28 4
gpt4 key购买 nike

Elasticsearch 中是否缺少以扁平化形式(多个子/子aggs)返回结果的方法?
例如,当前我正在尝试获取所有产品类型及其状态(在线/离线)。
这就是我最终得到的:
aggs

[
{ key: SuperProduct, doc_count:3, subagg:[
{status:online, doc_count:1},
{status:offline, doc_count:2}
]
},
{ key: SuperProduct2, doc_count:10, subagg:[
{status:online, doc_count:7},
{status:offline, doc_count:3}
]
图表库倾向于将其展平,所以我想知道Elasticsearch是否可以这种方式提供它:
[
{ products_key: 'SuperProduct', status_key:'online', doc_count:1},
{ products_key: 'SuperProduct', status_key:'offline', doc_count:2},
{ products_key: 'SuperProduct2', status_key:'online', doc_count:7},
{ products_key: 'SuperProduct2', status_key:'offline', doc_count:3}
]
谢谢

最佳答案

composite aggregation可以用来链接两个术语聚合:

// POST /i/_search

{
"size": 0,
"aggregations": {
"distribution": {
"composite": {
"sources": [
{"product": {"terms": {"field": "product.keyword"}}},
{"status": {"terms": {"field": "status.keyword"}}}
]
}
}
}
}
这导致以下结构:
{
"aggregations": {
"distribution": {
"after_key": {
"product": "B",
"status": "online"
},
"buckets": [
{
"key": {
"product": "A",
"status": "offline"
},
"doc_count": 3
},
{
"key": {
"product": "A",
"status": "online"
},
"doc_count": 2
},
{
"key": {
"product": "B",
"status": "offline"
},
"doc_count": 1
},
{
"key": {
"product": "B",
"status": "online"
},
"doc_count": 4
}
]
}
}
}
如果由于某种原因复合聚合不能满足您的需求,请使用 ou can create (via copy_to or by concatenation) or simulate (via scripted fields) field唯一标识存储桶。在我们的项目中,我们进行了级联(部分原因是必须在该字段上崩溃),例如 {"bucket": "SuperProductA:online"},这会导致输出更脏(您必须将该字段解码回去或使用顶部匹配项来获取原始值),但仍然可以完成工作。

关于elasticsearch - 合并/展平子aggs到主agg,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64017678/

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