原始数据类似
[ { "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 2024-01-29 20:19:44 +08:00 这种单字段的,直接 collapse a 然后查 status=b |
![]() | 3 ijyuqi 2024-01-30 10:05:15 +08:00 按排序获取分组最新的一条数据 { "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 } } } } } } |