在 Elasticsearch 聚合中获取更多字段而不是只有一个字段
Get more fields instead of only one in Elasticsearch aggregation
我是 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 值?
如果没有,还有其他可能的方法来完成我的工作吗?
提前致谢:)
如果我没理解错的话,您正在寻找 Top Hits aggregation, you can include any number of fields with source filtering,试试这个
{
"size": 0,
"aggs": {
"agg1": {
"terms": {
"field": "field1"
},
"aggs": {
"include_fields": {
"top_hits": {
"size": 100,
"_source": {
"include": [
"field2",
"field3"
]
}
}
}
}
}
}
}
我是 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 值?
如果没有,还有其他可能的方法来完成我的工作吗?
提前致谢:)
如果我没理解错的话,您正在寻找 Top Hits aggregation, you can include any number of fields with source filtering,试试这个
{
"size": 0,
"aggs": {
"agg1": {
"terms": {
"field": "field1"
},
"aggs": {
"include_fields": {
"top_hits": {
"size": 100,
"_source": {
"include": [
"field2",
"field3"
]
}
}
}
}
}
}
}