1

我有一堆文档,其中包含用户名和 device_os 字段,如下所示:

{ "username": "foo", "device_os": "Android", ....},
{ "username": "foo", "device_os": "iOS", ....},
{ "username": "bar", "device_os": "Android", ....},
{ "username": "baz", "device_os": "iOS", ....},
{ "username": "foo", "device_os": "iOS", ....}

我想通过用户名获取所有不同的 device_os,如下所示:

{ 
  "foo": ["Android", "iOS"],
  "bar": ["Android"],
  "baz": ["iOS"] 
}

在elasticsearch中做这样的事情的最好方法是什么,特别是elasticsearch-py?

4

2 回答 2

1

您可以通过以下方式使用“术语”聚合

{
 "query": {
           "match_all": {}
          },
 "aggs":{
          "usr_agg":{
                     "terms": {"field": "username"}
                    }
        }
 }

欲了解更多信息

于 2016-08-31T19:45:28.507 回答
0

万一有人来了,解决这个问题的想法很简单:在 上使用二级聚合usr_agg,如下所示:

{
    "size": 0,
    "aggs": {
        "usr_agg": {
            "terms": {
                "field": "username.keyword"
            },
            "aggs": {
                "by_device_os": {
                    "terms": {
                        "field": "device_os.keyword"
                    }
                }
            }
        }
    }
}
于 2020-08-26T07:16:49.533 回答