我需要创建一个聚合,如“范围”,但我需要指定每个存储桶的“where”子句。elasticsearch范围聚合固定桶值
例如,如果我们聚集上的 “年龄” 字段,什么范围AGG报价是:
- 桶1:〜10
- 桶2:10〜50
- 铲斗3:从50
我需要的是:
- 斗1:5433 4211和76]
- 桶2:[66和435]
- 铲斗3:[5455,7968,1,443和765]
我不想创建3 “术语” 聚合与“包含”属性,我需要的是一个聚合与3桶(就像范围报价)。
任何想法或替代?
我需要创建一个聚合,如“范围”,但我需要指定每个存储桶的“where”子句。elasticsearch范围聚合固定桶值
例如,如果我们聚集上的 “年龄” 字段,什么范围AGG报价是:
我需要的是:
我不想创建3 “术语” 聚合与“包含”属性,我需要的是一个聚合与3桶(就像范围报价)。
任何想法或替代?
所以,还有另一种方法使用术语聚合与脚本类似的结果。
"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"
}
}
}
}
}
}
只有第一个桶会导致问题,因为范围已经停止,但所有其他的都可以通过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] – Gustavo
之后,确实,这个例子不太好:-)对不起 – Val