用了Elasticsearch,一口气上5T

composite aggregation能否根据aggs里的属性来排序

Elasticsearch | 作者 shengtu0328 | 发布于2022年07月20日 | 阅读数:1326

GET test_composite_order/_search
{
  "size": 0,
  "aggs": {
    "my_buckets": {
      "composite": {
        "size": 3,
        "sources": [
          {
            "aggs_keyword": {
              "terms": {
                "field": "keyword.keyword"
              }
            }
          }
        ]
      },
      "aggs": {
        "aggs_min_gmt_create": {
          "min": {
            "field": "gmt_create"
          }
        }
      }
    }
  }
}
也就是想 根据 aggs_min_gmt_create 最早的创建时间来排序。而且是全量数据下的排序,不是当前页排序。
 根据keyword.keyword 来分组,但是排序的时候想要根据  keyword.keyword 最早的创建时间降序排序。






官网说的是在 
composite source里的值可以排序




已邀请:

Charele - Cisco4321

赞同来自:

你这个要求好像跟composite agg没有关系
(你这个简单的composite agg其实就是一个term agg)
 
 
{  "size": 0,
  "aggs": {
    "my_buckets": {
      "composite": {
        "sources": [
          {
            "aggs_keyword": {
              "terms": {
                "field": "keyword.keyword"
              }
            }
          }
        ]
      },
      "aggs": {
        "aggs_min_gmt_create": {
          "min": {
            "field": "gmt_create"
          }
        },
        "sortAgg": {
          "bucket_sort": {
            "sort": [
              {
                "aggs_min_gmt_create": {
                  "order": "asc"
                }
              }
            ],
            "size": 3
          }
        }
      }
    }
  }
}

Charele - Cisco4321

赞同来自:

1 你用aggs terms + bucket_sort,会有什么问题吗?
是内存不足还是别的?如果有报错,贴一下。
(那个"search.max_buckets"原因除外,因为你不管用哪种形式的聚合,桶一多肯定会有这问题)
 
 2 我猜一下你的想法,不晓得是不是这样的
你是想用一个复合agg,聚合条件是(keyword,gmt_create)这两个合起来,
 
然后在桶内部进行排序(按gmt_create从小到大),取出每个桶的Top3,对吗?
 
另外,你上面说到了“分页”, 你这个和分页没有任何关系吧。

shengtu0328

赞同来自:

桶一多肯定会有这问题
composite-aggregation-order  的分页好像没有这问题?

Charele - Cisco4321

赞同来自:

我不晓得你说的的"composite-aggregation-order  的分页"是什么,
 
单纯的composite聚合肯定有,只要是用桶的,肯定有。
111.png

 
 

要回复问题请先登录注册