我在索引中有一些对象是由一个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"}
}
}
}
}
我用错了顺序:
找到两个聚合类型定义
2条答案
按热度按时间kognpnkq1#
你不可能用一个
composite
因为terms
源不能按子聚合的值排序,就像“normal”的情况一样terms
聚合(而且日期格式错误)因此,正确的查询将为您提供所需的:
由于复合聚合的工作方式,不可能实现您想要的。原因是创建复合聚合是为了对大量的bucket进行“分页”。分页是由桶的排序方式定义的。如果可以根据子聚合对bucket进行排序,则意味着在返回结果的第一页之前,需要对所有bucket进行预计算和预排序,这将完全破坏此聚合的目的。
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"
}
}
}
}
}
}