使用无痛脚本循环播放

时间:2018-01-30 23:41:58

标签: elasticsearch elasticsearch-painless

有没有办法在Elasticsearch 5.3中使用无痛脚本循环查询结果来计算查询返回的命中之间的差异。

我试图在脚本中的for循环中循环结果,并且无法循环到什么实体,我正在跳过脚本有类似更新api的东西ctx.payload.hits.hits可用于for loop。

"script": {
        "lang": "painless",
        "inline": "int total = 0; for (int i = 0; i <  ??? ; i++) { total +=  ???[i]._source['age'].value; } return total;"
    }

1 个答案:

答案 0 :(得分:0)

我也遇到了同样的问题,我在弹性论坛上发现了这个thred。似乎使用map-reduce是实现“通过点击迭代”的最简单方法,因为我没有发现其他任何东西。 由于关于弹性的问题与您的完全相同,我想您已经写了它,还有后续问题。

关于最终目标是什么,这个问题尚不清楚,但是我建议您熟悉MapReduce,因为脚本化指标聚合似乎基于此。但是,从documentation中读取的内容,实现起来似乎完全不同,我引用:

  

在所有分片均返回其结果后,在协调节点上一次执行 。该脚本可以访问变量_aggs,该变量是每个分片上combine_script的结果的数组。如果未提供reduce_script,则reduce阶段将返回_aggs变量。

在我看来,在执行 map_script (和可选的 combine_script )之后,在单个节点上执行了“减少工作”。这样,您可以在 map_script 中收集所有需要的数据,并在 reduce_script 中具有逻辑。 但我必须强调,我对这类事情经验不足,并且自己遇到了(不同的)麻烦。