原始数据类似
[
{
"doc_key": 'a',
"startsAt": '2024 年 1 月 29 日',
"status": 'a'
},
{
"doc_key": 'a',
"startsAt": '2024 年 1 月 30 日',
"status": 'b'
}
]
对上面样例 需要返回 doc_key=a, status=b
的记录。
通过翻文档目前我实现的
{
"aggs": {
"unique_doc": {
"terms": {
"field": "doc_key", // 每个 doc_key 有多条记录
}
},
"aggs": {
"latest": {
"top_hits": {
"size": 1,
"sort": [
{
"@timestamp": {
"order": "desc"
}
}
]
}
},
"pagination": {
"bucket_sort": {
"size": 10,
"from": 0
}
}
}
}
}
问题: 没有实现最后一步状态过滤。
理想是在 top_hits 中能有个 filter 过滤status
字段,然后结合bucket selector
过滤 hit count != 0 的桶。
请教各位大佬该怎么做?
1
chana71 OP |
2
akinoowari 295 天前
这种单字段的,直接 collapse a 然后查 status=b
|
3
ijyuqi 295 天前
按排序获取分组最新的一条数据
{ "aggs": { "group_by_category": { "terms": { "field": "doc_key", "size": 10 }, "aggs": { "top_records": { "top_hits": { "sort": [ { "doc_key": { "order": "desc" } }, { "startsAt": { "order": "desc" } } ], "size": 1 } } } } } } |