我需要创建一个聚合,比如“range”,但是我需要指定每个桶的“where”子句。
例如,如果我们在“年龄”字段上聚合,那么agg提供的范围是:
我需要的是:
我不想用“include”属性创建3个“术语”聚合,我需要的是一个带有3个桶的聚合(就像范围提供一样)。
任何想法或替代方案?
答案 0 :(得分:0)
由于范围已停止,因此只有第一个存储桶会导致问题,但在from/to
存储桶中使用range
约束可以轻松指定所有其他存储桶。我建议这样的事情:
{
"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
]
}
}
}
}
答案 1 :(得分:0)
因此,还有另一种方法可以使用术语聚合和脚本来获得类似的结果。
"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"
}
}
}
}
}
}