scripted_metric聚合:未调用map_script和combine_script

时间:2015-08-04 08:56:26

标签: elasticsearch aggregation

我刚刚开始使用ElasticSearch(v1.5)scripted_metric聚合,并且在尝试使用example aggregation from the documentation时已经发现了。

在我从脚本中找到access the elasticsearch logger的方法后,结果发现只调用了init_scriptreduce_scriptmap_scriptcombine_script即使在将脚本简化为仅仅记录之后,也会被省略。

[...]
  "aggs": {
    "test": {
      "scripted_metric": {
            "init_script" : "import  org.elasticsearch.common.logging.*; ESLogger logger=ESLoggerFactory.getLogger('myscript');logger.error('1')",
            "map_script" : "import  org.elasticsearch.common.logging.*; ESLogger logger=ESLoggerFactory.getLogger('myscript');logger.error('2')", 
            "combine_script" : "import  org.elasticsearch.common.logging.*; ESLogger logger=ESLoggerFactory.getLogger('myscript');logger.error('3')",
            "reduce_script" : "import  org.elasticsearch.common.logging.*; ESLogger logger=ESLoggerFactory.getLogger('myscript');logger.error('4')"
      }
    }
  }
[...]

日志

[2015-08-04 08:31:31,841][ERROR][myscript                 ] 1
[2015-08-04 08:31:31,841][ERROR][myscript                 ] 1
[2015-08-04 08:31:31,843][ERROR][myscript                 ] 1
[2015-08-04 08:31:31,844][ERROR][myscript                 ] 1
[2015-08-04 08:31:31,845][ERROR][myscript                 ] 1
[2015-08-04 08:31:32,020][ERROR][myscript                 ] 4

以前,我开始使用doc示例的略微修改版本:

[...]
  "aggs": {
    "test": {
      "scripted_metric": {
         "init_script" : "_agg['transactions'] = []",
            "map_script" : "_agg.transactions.add(2)", 
            "combine_script" : "profit = 0; for (t in _agg.transactions) { profit += t }; return profit",
            "reduce_script" : "profit = 0; for (a in _aggs) { profit += a }; return profit"
      }
    }
  }
[...]

引起的ReduceSearchPhaseException失败的

[Ambiguous method overloading for method java.lang.Integer#plus.
Cannot resolve which method to invoke for [null] due to overlapping prototypes between:
    [class java.lang.Character]
    [class java.lang.String]
    [class java.lang.Number]]

这是因为在reduce_script中,_aggs数组由五个null组成,如果map_scriptcombine_script不运行,则完全有意义。

但为什么他们不跑?任何深入挖掘的想法都会受到赞赏。

1 个答案:

答案 0 :(得分:0)

如果应用过于严格的过滤器以便找不到文档,则会发生这种情况。在我的情况下,bool过滤器隐藏在我的邮递员的首页,我花了一些时间才意识到 - 抱歉,这是一个多么愚蠢的错误: - /

显然,在空搜索结果中mapcombine没有任何内容。