【问题标题】:Looping through hits using painless script使用无痛脚本循环点击
【发布时间】:2018-07-24 00:52:27
【问题描述】:

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

我试图在脚本中的 for 循环中循环结果,但无法在哪个实体上循环,我希望脚本有类似更新 api 的 ctx.payload.hits.hits 可用于for 循环。

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

【问题讨论】:

    标签: elasticsearch elasticsearch-painless


    【解决方案1】:

    我也遇到过同样的问题,我在弹性论坛上找到了这个thred。看起来使用 map-reduce 是实现“通过命中迭代”的最简单方法,因为我还没有找到其他任何东西。 由于弹性问题与您的问题完全相同,我猜您已经编写了它,以及后续问题。

    这个问题有点不清楚最终目标是什么,但我建议您熟悉MapReduce,因为看起来脚本化度量聚合是基于它的。但是,从documentation 阅读,看起来实现完全不同,我引用:

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

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

    【讨论】:

      猜你喜欢
      • 2018-07-09
      • 1970-01-01
      • 1970-01-01
      • 2017-07-31
      • 2019-03-12
      • 2021-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多