gpt4 book ai didi

elasticsearch - Elastic脚本化指标聚合中的并发性?

转载 作者:行者123 更新时间:2023-12-02 22:54:48 25 4
gpt4 key购买 nike

我正在尝试在Elasticsearch中将平均值实现为脚本化的指标聚合。这是我想出的:

{
"scripted_metric": {
"init_script": {
"source": "state.sum = 0.0; state.count = 0.0;",
"lang": "painless"
},
"map_script": {
"source": " if (doc.TradedValue.size() > 0) { state.sum += doc.TradedValue.value; state.count++; }",
"lang": "painless"
},
"combine_script": {
"source": "return state;",
"lang": "painless"
},
"reduce_script": {
"source": " double avg = 0; double c = 0; for (s in states) { avg += s.sum; c += s.count; } if (c == 0) { return 0.0; } return avg / c;",
"lang": "painless"
}
}
}

这似乎可行,并且产生的结果与标准 avg度量标准相同。

但是,我担心 map_script中的部分可能不正确。在我所看到的所有示例中,此脚本都对状态执行某种 .add方法,并且求和是在 combine_script中完成的。

我认为这可能是由于并发问题导致的,因此 +=map_script中不安全。是这样吗还是我的脚本正确?

最佳答案

如有疑问,请联系源!在Elastic的github存储库上,有一些scripted_metric示例。

如果您检查this one,您会发现它们的执行方式与您完全相同,即,它们确实直接在map_script中增加值。

令人遗憾的是,只允许将String和基本类型存储在内部状态,否则您可以用java.util.concurrent.atomic.DoubleAccumulator交换双基本类型,并在accumulate()中调用map_script而不是+=

除非您实际上拥有witnessed real issues可以证实您的疑问,否则我现在不会真的担心。

关于elasticsearch - Elastic脚本化指标聚合中的并发性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58289685/

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