gpt4 book ai didi

elasticsearch - Elasticsearch范围唯一聚合文档

转载 作者:行者123 更新时间:2023-12-03 00:17:38 25 4
gpt4 key购买 nike

Elasticsearch 2.1.1。
该索引包含有关运动员跳跃的记录。每个运动员都有几次尝试跳跃的尝试。
该文档具有以下结构:

{
'event_at' : '2015-01-01T12:12:10', - date of jump
'user_id' : 2142, - athlete’s id
'distance' : 4 - result
}

有必要获得以下结果:
{'distance_range' : 
{'*-5' : 12, - the number of unique athletes with the maximum jump score in the range from 0 to 5
'6-10': 14,- the number of unique athletes with the maximum jump score in the range from 6 to 10
'11-15': 5 - the number of unique athletes with the maximum jump score in the range from 11 to 15
}
}

我设法获得了每个运动员的跳高得分的最大值,但我不知道如何在更高的水平上获得该结果。

使用SQL可以像这样:
SELECT `distace_range`, count(*) FROM (
SELECT
`user_id`,
IF(MAX(`distace`) <=5,
'*-5',
IF(MAX(`distace`) >= 6 AND MAX(`distace`) >= 10,
'6-10',
'11-15'
)
) `distace_range`
FROM `events`
GROUP BY `user_id`
) t
GROUP BY `distace_range;

最佳答案

我在专用于Elasticsearch的official forum上发布了一个问题。目前,标准仪器无法解决该问题,因为对于以下查询:

'aggregations' => [
'distance_range' => [
'terms' => [
'field' => 'doc.user_id',

],
'aggregations' => [
'max_distance' => [
'max' => [
'field' => 'doc.distance'
]
]
]
]
]

在Elasticsearch 2.1版中,没有按范围或术语分类的管道聚合器。

有几种解决此问题的方法:
  • 创建包含最大结果
  • 的附加索引
  • 使用脚本
  • 在客户端上对结果求和

  • 我使用了第三种方法。

    第一种选择有一个很大的缺点:要拥有相关的附加索引,必须对其进行控制。因此,我对这种解决方案不满意。

    第二种选择也有一些重要限制:
    计算的复杂性或对选择的影响会显着影响访问时间。而且,我们必须在多个系统中维护代码。

    关于elasticsearch - Elasticsearch范围唯一聚合文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34836197/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com