【问题标题】:Scan result of a aggregation聚合的扫描结果
【发布时间】:2019-09-03 03:05:41
【问题描述】:

我想查看一个用户为每个用户发布了多少个唯一链接。这是我到目前为止提出的内容

s.aggs.bucket('user_term', A('terms', field='user__id')).metric('url_count', A('value_count', field='link'))

但是,我还没有找到一种方法来遍历该结果。有办法吗?

【问题讨论】:

    标签: elasticsearch elasticsearch-dsl elasticsearch-dsl-py


    【解决方案1】:

    这不会给你一个唯一的计数,只是一些具有该字段值的文档,你想使用 cardinality 代替:

    s.aggs.bucket('users', 'terms', field='user.id').metric('url_count', 'cardinality', field='link')
    
    r = s.execute()
    
    for user in r.aggregations.users.buckets:
        print(f'User {user.key} posted {user.url_count.value} links')
    

    希望对你有帮助

    【讨论】:

    • 是否也可以在elasticseach_dsl 的文档中添加cardinality 示例?如果您不介意,我可以提出拉取请求
    • 另外,这仅显示 10 个结果。我在做s=[:],但遇到了TransportError(502)stackoverflow.com/questions/47219846/… 似乎不起作用
    • terms 聚合默认返回前 10 个桶,您可以在 bucket() 调用中指定 size=50,但对于大量数据会变得更加昂贵。如果你想把所有东西都拿出来,考虑composite聚合,见例子:github.com/elastic/elasticsearch-dsl-py/blob/master/examples/…
    猜你喜欢
    • 2017-03-24
    • 1970-01-01
    • 2016-08-24
    • 2020-07-01
    • 2018-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多