elasticsearch中是否存在以某种扁平形式(多个子/子聚合)返回结果的方法?
例如,目前我正在尝试获取所有产品类型及其状态(在线/离线)。
这就是我的结局: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}
]
谢谢
1条答案
按热度按时间ukqbszuj1#
可以使用复合聚合来链接两个术语聚合:
这将导致以下结构:
如果出于任何原因复合聚合不能满足您的需要,您可以创建(通过copy\ to或concatenation)或模拟(通过脚本化字段)唯一标识bucket的字段。在我们的项目中,我们使用了连接(部分原因是这个领域需要崩溃)。
{"bucket": "SuperProductA:online"}
,这将导致更脏的输出(您必须将该字段解码回来或使用最上面的点击来获得原始值),但仍然可以完成这项工作。