具有固定桶值的弹性搜索范围聚合
elasticsearch range aggregation with fixed buckets values
我需要创建一个聚合,例如 "range",但我需要指定每个存储桶的 "where" 子句。
例如,如果我们在 "age" 字段上进行聚合,则聚合报价的范围是:
- 桶 1:至 10
- 桶 2:从 10 到 50
- 桶 3:从 50
我需要的是:
- 桶 1:[5,4334,211 和 76]
- 桶 2:[66 和 435]
- 桶 3:[5455、7968、1、443 和 765]
我不想使用 "include" 属性 创建 3 个 "terms" 聚合,我需要的是一个包含 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
]
}
}
}
}
因此,还有另一种使用带有脚本的术语聚合来获得类似结果的方法。
"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",但我需要指定每个存储桶的 "where" 子句。
例如,如果我们在 "age" 字段上进行聚合,则聚合报价的范围是:
- 桶 1:至 10
- 桶 2:从 10 到 50
- 桶 3:从 50
我需要的是:
- 桶 1:[5,4334,211 和 76]
- 桶 2:[66 和 435]
- 桶 3:[5455、7968、1、443 和 765]
我不想使用 "include" 属性 创建 3 个 "terms" 聚合,我需要的是一个包含 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
]
}
}
}
}
因此,还有另一种使用带有脚本的术语聚合来获得类似结果的方法。
"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"
}
}
}
}
}
}