有没有办法使用聚合桶的key
值作为子聚合中的参数?
有一个索引:
{
"id": 152,
"description": "cool stuff",
"datesWithTotal" : [
{
"date" : "2014-02-02T00:00:00",
"total" : 47.2
},
{
"date" : "2014-02-03T00:00:00",
"total" : 51.2
},
{
"date" : "2014-02-04T00:00:00",
"total" : 56.4
}
]
}
我想使用子聚合执行date_histogram
聚合,该子聚合将根据当前parentbucket.key
值执行某些操作
{
"aggs": {
"histo": {
"date_histogram": {
"field": "datesWithTotal.date",
"interval": "1d"
},
"aggs": {
"script-test": {
"scripted_metric": {
"init_script": "_agg['sum'] = 0",
"map_script": "_agg.sum += (PARENTBUCKET.KEY == 'somevalue' ? 1 : 0)",
"combine_script": "return _agg.sum"
}
}
}
}
}
}
我已经以这种方式使用了一些脚本,但每个脚本都没有使用父节点中的任何内容,只是普通的整数参数。
答案 0 :(得分:0)
这只是一个想法。我已经快速测试了它,但无论出于何种原因,它都没有输出我认为应该的东西。也许它会给你一些进一步的想法,或者你可以让它以我迄今未能达到的方式运作:
{
"aggs": {
"histo": {
"date_histogram": {
"field": "datesWithTotal.date",
"interval": "1d"
},
"aggs": {
"doesIncludeDate": {
"terms": {
"script": "new Date(doc[\"datesWithTotal.date\"].value).format(\"yyyy-MM-dd\")",
"valueType": "string",
"include": {
"pattern": "2014-02-04"
}
},
"aggs": {
"script-test": {
"scripted_metric": {
"init_script": "_agg['sum'] = 0",
"map_script": "_agg.sum += 1",
"combine_script": "return _agg.sum"
}
}
}
},
"doesNotIncludeDate": {
"terms": {
"script": "new Date(doc[\"datesWithTotal.date\"].value).format(\"yyyy-MM-dd\")",
"valueType": "string",
"exclude": {
"pattern": "2014-02-04"
}
},
"aggs": {
"script-test": {
"scripted_metric": {
"init_script": "_agg['sum'] = 0",
"map_script": "_agg.sum += 0",
"combine_script": "return _agg.sum"
}
}
}
}
}
}
}
}
我们的想法是使用terms
聚合与include
和另一个terms
与exclude
聚合,以获得与您的父存储桶密钥匹配的存储桶。对于匹配的用户,请将您的脚本与_agg.sum += 1
一起用于其他用途_agg.sum += 0
。
当然,所有这些都是针对一个非常具体的脚本:日期是X还是不是。如果脚本更复杂,那么它将没有用处。我不认为你可以从脚本访问父键(或者我没有找到办法)。