如何在ElasticSearch聚合中轻松访问脚本中的doc字段?

时间:2018-12-06 10:20:29

标签: elasticsearch elasticsearch-aggregation elasticsearch-painless

我正在尝试以无痛的聚合方式访问文档字段,如下所示:

"aggs": {   
    "errors": {
      "nested": {
        "path": "summary.testResult.testSuites.testCases.errors"
      },
      "aggs": {
        "message": {
          "terms": {
            "field": "summary.testResult.testSuites.testCases.errors.message.keyword",
            "size": 20,
            "script": {
                  "source": "def total=0; 
                            for (int i = 0; i < doc['summary']['testResult'].length; ++i)                               
                                total += doc['summary']['testResult']['numOfErrors'].value;
                            return total;"
            }
          }
        }
      }
    }
}

但是经过一些研究,我意识到

  

”同时为“   汇总后,该脚本将被视为值脚本。而   普通脚本在文档级别进行评估(即该脚本具有   访问与文档关联的所有数据),值脚本   在价值水平上进行评估。在此模式下,值是   从配置的字段中提取,脚本用于应用   在这些值上进行“转换”。”

根据https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations.html#_values_source

但是我需要在文档级别评估脚本,以便我可以进行一些复杂的计算(不限于加法)。有什么方法可以实现我想要的吗?

更新: 我发现可以使用“热门匹配”来获取搜索结果中属于某个存储桶的文档,但这只能使我最多获取100个文档,因此这不是一个可行的解决方案。

0 个答案:

没有答案