在 Elasticsearch 中聚合后排序
Sorting after aggregation in Elasticsearch
我有这种结构的文档:
{
FIELD1:string,
FIELD2:
[ {SUBFIELD:number}, {SUBFIELD:number}...]
}
我想对 FIELD2.SUBFIELDs 中数字总和的结果进行排序:
GET myindex/_search
{
"size":0,
"aggs": {
"a1": {
"terms": {
"field": "FIELD1",
"size":0
},
"aggs":{
"a2":{
"sum":{
"field":"FIELD2.SUBFIELD"
}
}
}
}
}
}
如果我这样做,我将获得未排序的存储桶,但我希望存储桶按 "a2" 值排序。
我该怎么做?
谢谢!
你几乎成功了。您只需要将 order
property 添加到 a1
术语聚合中,如下所示:
GET myindex/_search
{
"size":0,
"aggs": {
"a1": {
"terms": {
"field": "FIELD1",
"size":0,
"order": {"a2": "desc"} <--- add this
},
"aggs":{
"a2":{
"sum":{
"field":"FIELD2.SUBFIELD"
}
}
}
}
}
}
来自 Val 的精彩 https://whosebug.com/users/4604579/val
基本上是一样的,但以下是我为每个 "name" 找到最大的 "size" 并显示前 25 个最大的方法:
{
"size": 0,
"aggs": {
"agg1": {
"terms": {
"field": "name.keyword",
"order": {
"agg2": "desc"
},
"size": 25
},
"aggs": {
"agg2": {
"max": {
"field": "size"
}
}
}
}
}
}
我有这种结构的文档:
{
FIELD1:string,
FIELD2:
[ {SUBFIELD:number}, {SUBFIELD:number}...]
}
我想对 FIELD2.SUBFIELDs 中数字总和的结果进行排序:
GET myindex/_search
{
"size":0,
"aggs": {
"a1": {
"terms": {
"field": "FIELD1",
"size":0
},
"aggs":{
"a2":{
"sum":{
"field":"FIELD2.SUBFIELD"
}
}
}
}
}
}
如果我这样做,我将获得未排序的存储桶,但我希望存储桶按 "a2" 值排序。 我该怎么做? 谢谢!
你几乎成功了。您只需要将 order
property 添加到 a1
术语聚合中,如下所示:
GET myindex/_search
{
"size":0,
"aggs": {
"a1": {
"terms": {
"field": "FIELD1",
"size":0,
"order": {"a2": "desc"} <--- add this
},
"aggs":{
"a2":{
"sum":{
"field":"FIELD2.SUBFIELD"
}
}
}
}
}
}
来自 Val 的精彩 https://whosebug.com/users/4604579/val
基本上是一样的,但以下是我为每个 "name" 找到最大的 "size" 并显示前 25 个最大的方法:
{
"size": 0,
"aggs": {
"agg1": {
"terms": {
"field": "name.keyword",
"order": {
"agg2": "desc"
},
"size": 25
},
"aggs": {
"agg2": {
"max": {
"field": "size"
}
}
}
}
}
}