我的用例如下:
我在elasticsearch上有文档,我保存了一些遥测数据,并在将其聚合到弹性搜索之前(每个文档都有一个计数字段,该字段可以告诉这个事件发生了多少次)。
json字段的示例:
{
"timestamp": "2021-06-05T06:53:25.275172"
"count": 5
"name": "myname",
"type: "mytype",
"sub_type": "mysubtype"
},
{
"timestamp": "2021-05-05T07:53:25.275172"
"count": 2
"name": "myname",
"type: "mytype",
"sub_type": "zzzzzmysubtype222"
}
{
"timestamp": "2021-04-05T06:22:25.275172"
"count": 1
"name": "myname",
"type: "mytype",
"sub_type": "mysubtype"
},我正在执行一个查询,以聚合所有“唯一”文档(按名称、类型和sub_type),同时计算响应总数,并且我希望按照时间戳对桶进行排序。
问题是,我有一个“限制”参数,它限制了接收结果的数量,当我将其限制为1时,我不会得到最新的事件桶(据我所知,它按3个字段对它们进行排序,然后限制大小,然后再对其进行排序)。
所以,当运行下面的查询时-我想得到"myname,mytype,mysubtype",但实际上我得到了"myname,mytype,zzzzzmysubtype222“作为第一个桶。如果我提高限制-那么它是正确的排序。
这是我的疑问:
{
"query": {
"bool": {
"filter": [{"range": {"timestamp": {"lte": "now", "gte": "2020-06-05"}}}],
}
},
"aggs": {
"events": {
"composite": {
"size": 1, <----------- this doesn't give me latest bucket
"sources": [
{"name": {"terms": {"field": "name.keyword"}}},
{"type": {"terms": {"field": "type.keyword"}}},
{"sub_type": {"terms": {"field": "sub_type.keyword"}}},
],
},
"aggs": {
"events_count": {"sum": {"field": "count"}},
"latest_event": {"top_hits": {"sort": [{"timestamp": {"order": "desc"}}], "size": 1}},
"top_hit": {"max": {"field": "timestamp"}},
"events_bucket_sort": {"bucket_sort": {"sort": [{"top_hit": {"order": "desc"}}]}},
},
}
},
"size": 0,
}所以,我想要做的是按照最新的事件时间戳(top_hit)对桶进行排序--任何帮助都将不胜感激。
我想这和订单有关
但是时间戳不应该聚合,所以我如何控制水桶的自然类型?我只需要先收到最新的,不管大小,
如果不可能,是否可以获得共享多个公共字段的唯一文档聚合?
发布于 2021-06-01 03:10:07
就我所能理解的问题而言,您需要基于name、type和sub_type字段的唯一桶,然后根据形成的桶,您需要获得最新的桶(基于时间戳)。
如果您希望获得基于多个字段的唯一桶,可以使用多项聚合和top_hits聚合来根据时间戳获得最新的桶。
{
"size": 0,
"aggs": {
"genres_and_products": {
"multi_terms": {
"terms": [
{
"field": "name.keyword"
},
{
"field": "type.keyword"
},
{
"field": "sub_type.keyword"
}
]
}
},
"latest_event": {
"top_hits": {
"sort": [
{
"timestamp": {
"order": "desc"
}
}
],
"size": 1
}
}
}
}搜索结果:
"aggregations": {
"genres_and_products": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"key": [
"myname",
"mytype",
"mysubtype"
],
"key_as_string": "myname|mytype|mysubtype",
"doc_count": 2
},
{
"key": [
"myname",
"mytype",
"zzzzzmysubtype222"
],
"key_as_string": "myname|mytype|zzzzzmysubtype222",
"doc_count": 1
}
]
},
"latest_event": {
"hits": {
"total": {
"value": 3,
"relation": "eq"
},
"max_score": null,
"hits": [
{
"_index": "67775188",
"_type": "_doc",
"_id": "1",
"_score": null,
"_source": {
"timestamp": "2021-06-05T06:53:25.275172",
"count": 5,
"name": "myname",
"type": "mytype",
"sub_type": "mysubtype"
},
"sort": [
1622876005275
]
}
]
}
}https://stackoverflow.com/questions/67775188
复制相似问题