我正在开发一个查询,其中我计算最近文档中包含多少个唯一的“ cp”。 json由几个嵌套字段组成。 当我添加到带有嵌套字段的json时,我无法仅显示具有最新日期的json值。 我完成了嵌套聚合,最后我使用了top_hits过滤器以降序排序,并且它通过大小返回了我的最后一个。 但是它仍然会返回所有具有不同日期的文档。
JSON:
"data" : [
{
"addresses" : [
{
"cp" : "33.33.33",
"services" : [
{
"field1" : "true",
"field2" : "1234",
}
]
}
],
}
],
"created_at" : "2020-09-03 14:39:01",
"@timestamp" : "2020-09-04T05:53:22.341661Z",
}
},
查询:
{"size": 0,
"aggs": {
"nested": {
"nested": {
"path": "data.addresses"
},
"aggs": {
"nested": {
"nested": {
"path": "data.addresses.services"
},
"aggs": {
"filter": {
"filter": {
"term": {
"data.addresses.services.field1.keyword": "true"
}
},
"aggs": {
"unique": {
"cardinality": {
"field": "data.addresses.services.field2.keyword"
}
},
"range":{
"top_hits": {
"size": 1,
"sort": [
{"created_at.keyword": {"order": "desc"}}]
}
}
}
}
}
}
}
}
}
我尝试按预定义的字段“ created_at”或@timestamp进行排序,但结果相同。 有什么建议可以帮助我解决问题吗?
答案 0 :(得分:0)
在这种情况下,解决方案是添加
"order": {
"_key": "desc":
代替top_hits。
查询
{"size": 0,
"aggs": {
"filtrofecha": {
"terms": {
"field": "created_at.keyword",
"order": {
"_key": "desc"
},
"size": 1
},
"aggs": {
"nested": {
"nested": {
"path": "data.addresses"
},
"aggs": {
"nested": {
"nested": {
"path": "data.addresses.services"
},
"aggs": {
"filter": {
"filter": {
"term": {
"data.addresses.services.field1.keyword": "true"
}
},
"aggs": {
"unique": {
"cardinality": {
"field": "data.addresses.services.field2.keyword"
}
}
}
}
}
}
}
}
}
}
}