集合中最小值的ElasticSearch顺序

oo7oh9g9  于 2021-06-10  发布在  ElasticSearch
关注(0)|答案(2)|浏览(334)

我在索引中有一些对象是由一个id关联的,id对它们进行分组。组创建时间是 createdAt 组中的对象和最大 createdAt 组中的对象。
我想按最短时间或最长时间订购这些组,我怎么做?

{
   "size":0,
   "aggs":{
      "intervals":{
         "composite":{
            "size":10000,
            "sources":[
               {
                  "totalId":{
                     "terms":{
                        "field":"totalId"
                     }
                  },
                  "name": {
                    "terms":{
                        "field":"name"
                     }
                  }
               }
            ]
         },
         "aggs": {
          "createdAtStart": {
            "min": {"field": "createdAt", "format": "YYYY-MM-DD'T'HH:mm:ssZ"}, "order": { "createdAtStart": "desc" }
          },
          "createdAtEnd": {
            "max": {"field": "createdAt", "format": "YYYY-MM-DD'T'HH:mm:ssZ"}
          }
      }
   }
}

我用错了顺序:
找到两个聚合类型定义

kognpnkq

kognpnkq1#

你不可能用一个 composite 因为 terms 源不能按子聚合的值排序,就像“normal”的情况一样 terms 聚合(而且日期格式错误)
因此,正确的查询将为您提供所需的:

{
  "size": 0,
  "aggs": {
    "totalId": {
      "terms": {
        "field": "totalId",
        "order": {
          "createdAtStart": "asc"
        }
      },
      "aggs": {
        "createdAtStart": {
          "min": {
            "field": "createdAt",
            "format": "yyyy-MM-dd'T'HH:mm:ssZ"
          }
        },
        "createdAtEnd": {
          "max": {
            "field": "createdAt",
            "format": "yyyy-MM-dd'T'HH:mm:ssZ"
          }
        }
      }
    }
  }
}

由于复合聚合的工作方式,不可能实现您想要的。原因是创建复合聚合是为了对大量的bucket进行“分页”。分页是由桶的排序方式定义的。如果可以根据子聚合对bucket进行排序,则意味着在返回结果的第一页之前,需要对所有bucket进行预计算和预排序,这将完全破坏此聚合的目的。

voj3qocg

voj3qocg2#

您正在添加一个额外的 { ```
{
"size": 0,
"aggs": {
"intervals": {
"composite": {
"size": 10000,
"sources": [
{
"totalId": {
"terms": {
"field": "totalId"
}
}
}
] <-- note this
},
"aggs": {
"createdAtStart": {
"min": {
"field": "createdAt",
"format": "YYYY-MM-DD'T'HH:mm:ssZ"
},
"order": {
"createdAtStart": "desc"
}
},
"createdAtEnd": {
"max": {
"field": "createdAt",
"format": "YYYY-MM-DD'T'HH:mm:ssZ"
}
}
}
}
}
}

相关问题