V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
sniperking1234
V2EX  ›  程序员

求助: ES 聚合查询,使用了 nested,如何再对某个字段排序?

  •  
  •   sniperking1234 · 2020-11-27 14:14:56 +08:00 · 1398 次点击
    这是一个创建于 1455 天前的主题,其中的信息可能已经有所发展或是发生改变。

    查询语句如下面所示

    {
        "size": 0,
        "aggs": {
            "tags": {
                "nested": {
                    "path": "tags"
                },
                "aggs": {
                    "key": {
                        "filter": {
                            "term": {
                                "tags.key": "http.url"
                            }
                        },
                        "aggs": {
                            "values": {
                                "terms": {
                                    "field": "tags.value",
                                    "size": 100
                                },
                                "aggs": {
                                    "rev": {
                                        "reverse_nested": {},
                                        "aggs": {
                                            "duration": {
                                                "avg": {
                                                    "field": "duration"
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
    

    我想对 duration 这个字段按照平均值从大到小排序,找出前 100 条数据,那么这么排序要加在什么地方呢?

    3 条回复    2020-11-27 15:12:57 +08:00
    sniperking1234
        2
    sniperking1234  
    OP
       2020-11-27 14:57:11 +08:00
    @zsl199512101234 我试了下,这样写 sort 貌似对有聚合的查询不起作用。
    sniperking1234
        3
    sniperking1234  
    OP
       2020-11-27 15:12:57 +08:00
    找到方法了,这么写就可以
    {
    "size": 0,
    "aggs": {
    "tags": {
    "nested": {
    "path": "tags"
    },
    "aggs": {
    "key": {
    "filter": {
    "term": {
    "tags.key": "http.url"
    }
    },
    "aggs": {
    "values": {
    "terms": {
    "field": "tags.value",
    "size": 200,
    "order": {"rev>duration": "desc"}
    },
    "aggs": {
    "rev": {
    "reverse_nested": {},
    "aggs": {
    "duration": {
    "avg": {
    "field": "duration"
    }
    }
    }
    }
    }
    }
    }
    }
    }
    }
    }
    }
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3387 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 04:45 · PVG 12:45 · LAX 20:45 · JFK 23:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.