gpt4 book ai didi

elasticsearch - 使用从父聚合获取的参数的子聚合脚本

转载 作者:行者123 更新时间:2023-11-29 02:53:36 25 4
gpt4 key购买 nike

有没有办法使用聚合桶的值作为子聚合中的参数?

有一个像这样的索引:

{
"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"
}
}
}
}
}
}

我已经以这种方式使用了一些脚本,但每个脚本都没有使用父级的任何内容,只是普通的整数参数。

最佳答案

这只是一个想法。我已经对其进行了快速测试,但无论出于何种原因,都没有输出我认为应该输出的内容。也许它会给你一些进一步的想法,或者你可以让它以我迄今为止无法做到的方式工作:

{
"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"
}
}
}
}
}
}
}
}

我们的想法是使用一个带有includeterms 聚合和一个带有excludeterms 来获得与您的父存储桶键匹配或不匹配的存储桶。对于那些匹配的脚本,请将您的脚本与 _agg.sum += 1 一起使用,对于另一个,请使用 _agg.sum += 0

当然,所有这些都是针对您拥有的非常具体的脚本:日期是否为 X。如果脚本更复杂,它将没有用。而且我不认为您可以从脚本访问父 key (或者我还没有找到这样做的方法)。

关于elasticsearch - 使用从父聚合获取的参数的子聚合脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27857512/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com