elasticsearch - 如何在Elasticsearch中聚合结果?

标签 elasticsearch elasticsearch-aggregation

我想使用Elasticsearch聚合其他聚合的结果。我创建了我需要的第一个聚合:

es.search(index='stackoverflow', body = {
    "size":0,
    "query": {
        "bool": {
          "filter": {
              "match" : {"type": "Posts"}
          },
          "filter": {
              "match" : {"PostTypeId": "1"}
          }
        }
    },
    "aggs" : {
        "by_user": {
          "terms": {
            "field": "OwnerUserId"
          }
        }
    }
})

此查询接受所有类型为post的问题文档(PostTypeId = 1)。然后,它通过OwnerUserId进行聚合,该函数计算每个用户的问题帖子数,得出以下结果:
{'took': 0,
 'timed_out': False,
 '_shards': {'total': 1, 'successful': 1, 'skipped': 0, 'failed': 0},
 'hits': {'total': {'value': 10000, 'relation': 'gte'},
  'max_score': None,
  'hits': []},
 'aggregations': {'by_user': {'doc_count_error_upper_bound': 0,
   'sum_other_doc_count': 31053,
   'buckets': [{'key': '2230', 'doc_count': 223},
    {'key': '', 'doc_count': 177},
    {'key': '38304', 'doc_count': 158},
    {'key': '5997', 'doc_count': 144},
    {'key': '4048', 'doc_count': 130},
    {'key': '25813', 'doc_count': 119},
    {'key': '27826', 'doc_count': 119},
    {'key': '2633', 'doc_count': 115},
    {'key': '19919', 'doc_count': 114},
    {'key': '13938', 'doc_count': 111}]}}}

现在,我想对前一个结果进行另一个汇总:按doc_count汇总,我的意思是对相等数量的问题帖子进行分组和计数。对于先前的结果,我想要的结果将是:
{'buckets': [{'key': '223', 'doc_count': 1},
    {'key': '177', 'doc_count': 1},
    {'key': '158', 'doc_count': 1},
    {'key': '144', 'doc_count': 1},
    {'key': '130', 'doc_count': 1},
    {'key': '119', 'doc_count': 2},
    {'key': '115', 'doc_count': 1},
    {'key': '114', 'doc_count': 1},
    {'key': '111', 'doc_count': 1}]}

最佳答案

您可以尝试使用Bucket sort aggregation,它对排序其他aggs的结果很有用。

在此Elasticsearch forum中,用户共享了其他方式来对术语汇总进行排序。对于您的情况,您将使用“doc_count”(或“count”,我现在不记得了)字段以升序对结果进行排序。

请记住,嵌套聚合会降低群集的性能。就是说,将需要更多时间才能获得结果。

希望这会有所帮助! :)

关于elasticsearch - 如何在Elasticsearch中聚合结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59363105/

相关文章:

elasticsearch - 如何使用 Elasticsearch 更新 API 更新文档?

elasticsearch - 在字段上聚合并在Elasticsearch中返回总和

elasticsearch - 如何在ElasticSearch Aggregation中包含所有文档并避免sum_other_doc_count> 0

elasticsearch - 如何使用Elasticsearch使用构面计数器构建构面搜索

elasticsearch - Elasticsearch 平均时差聚合查询

elasticsearch - Elasticsearch-查询以从展平结构中获取记录的最新版本

elasticsearch - Elasticsearch:包括特定方面值

elasticsearch - 继续失败

elasticsearch - 安装后 Elasticsearch 服务无法启动

search - 搜索时保留位置