【问题标题】:elasticsearch range aggregation with fixed buckets values具有固定桶值的弹性搜索范围聚合
【发布时间】:2017-01-31 19:01:42
【问题描述】:

我需要创建一个聚合,比如“范围”,但我需要指定每个存储桶的“where”子句。

例如,如果我们在“年龄”字段上进行聚合,则聚合提供的范围是:

  • 桶 1:到 10
  • 桶 2:从 10 到 50
  • 3 号桶:50 起

我需要的是:

  • 存储桶 1:[5,4334,211 和 76]
  • 存储桶 2:[66 和 435]
  • 存储桶 3:[5455、7968、1、443 和 765]

我不想使用“include”属性创建 3 个“术语”聚合,我需要的是一个具有 3 个存储桶的聚合(就像范围优惠一样)。

有什么想法或替代方案吗?

【问题讨论】:

    标签: elasticsearch range fixed aggregation


    【解决方案1】:

    由于范围已终止,因此只有第一个存储桶会导致问题,但所有其他存储桶都可以通过 range 存储桶中的 from/to 约束轻松指定。我建议是这样的:

    {
        "aggs" : {
            "age_ranges" : {
                "range" : {
                    "field" : "age",
                    "ranges" : [
                        { "from": 5,  "to": 6 },     <--- only 5
                        { "from": 10, "to": 13 },    <--- 10, 11, 12
                        { "from": 13, "to": 15 },    <--- 13, 14
                        { "from": 20, "to": 26 }     <--- 20, 21, 22, 23, 24, 25
                    ]
                }
            }
        }
    } 
    

    【讨论】:

    • 感谢您的回复,但这并不是我想要的。我的例子实际上不太好。该范围实际上可能是一组随机的 id。我需要的是: - 存储桶 1:[6567, 11192, 759845, 79685] - 存储桶 2:[55, 896858, 459858] - 存储桶 3:[689658,696958,70707]
    • 那么,确实,这个例子不是那么好:-) 很抱歉
    【解决方案2】:

    因此,还有另一种使用术语聚合和脚本来获得类似结果的方法。

    "aggs": {
    "age_ranges": {
      "terms": {
        "script": {
          "inline": "if(ageMap.containsKey(doc['age'].value)){ageMap.get(doc['age'].value)} else {'<unmapped>'} ",
          "params": {
            "contentIdMapping": {
              "1": "bucket-3",
              "5": "bucket-1",
              "66": "bucket-2",
              "76": "bucket-1",
              "211": "bucket-1",
              "435": "bucket-2",
              "443": "bucket-3",
              "765": "bucket-3",
              "4334": "bucket-1",
              "5455": "bucket-3",
              "7968": "bucket-3"
            }
          }
        }
      }
    }
    

    }

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-09-25
      • 2014-11-10
      • 2017-09-25
      • 1970-01-01
      • 2017-01-26
      • 2020-03-19
      • 1970-01-01
      相关资源
      最近更新 更多