我是Elasticsearch的新手,我的程序有问题 为了在SQL中将结果分组为“group by”语句。我用聚合 但我意识到我需要在这里解决一个问题。我使用以下语句对结果进行分组:
{
"aggs": {
"agg1": {
"terms": {
"field": "field1"
},
"aggs": {
"agg2": {
"terms": {
"field": "field2"
},
"aggs": {
"agg3": {
"terms": {
"field": "field3"
}
}
}
}
}
}
}
}
我的问题是:field2和field3的值取决于field1值,因此如果你可以得到field1值,你也可以得到field2和field3的值。因此,如上所述进行聚合将耗费大量时间来完成我的程序(我已经测试过它并且意识到它比仅仅对field1进行分组要慢6倍)。
所以我的问题是:是否可以只对field1进行分组(只使用一个“aggs”),还可以得到field2和field3值?
如果不是,那么还有其他可能的方法来完成我的工作吗?
在此先感谢:)
答案 0 :(得分:0)
如果我理解正确,您正在寻找Top Hits汇总,您可以在source filtering中添加任意数量的字段,试试这个
{
"size": 0,
"aggs": {
"agg1": {
"terms": {
"field": "field1"
},
"aggs": {
"include_fields": {
"top_hits": {
"size": 100,
"_source": {
"include": [
"field2",
"field3"
]
}
}
}
}
}
}
}