【问题标题】:Proper groovy script for sum of fields in Elasticsearch documents用于 Elasticsearch 文档中字段总和的正确 groovy 脚本
【发布时间】:2016-05-27 11:51:33
【问题描述】:

这个问题是this question的后续问题。

如果我的文件是这样的:

{"documentid":1,
"documentStats":[ {"foo_1_1":1}, {"foo_2_1":5}, {"boo_1_1":3} ]
}

在 script_field 中使用什么正确的 groovy 脚本来返回每个文档匹配特定模式的所有 documentStats 的总和(例如,包含 _1_

【问题讨论】:

    标签: elasticsearch groovy


    【解决方案1】:

    与提到的问题类似,有一个单线可以对您的新结构做同样的事情:

    {
        "query" : {
            ...
        },
        "script_fields" : {
            "sum" : {
                "script" : "_source.documentStats.findAll{ it.keySet()[0] =~'_1_' }.collect{it.values()}.flatten().sum()"
            }
        }
    }
    

    【讨论】:

      【解决方案2】:

      我不知道 ES,但在纯 Groovy 中你会这样做:

      document.documentStats.collectMany { Map entry ->
        // assumes each entry has a single key and a single int value
        def item = entry.entrySet()[0]
        item.key.contains('_1_') ? [item.value] : []
      }.sum()
      

      希望这会有所帮助。

      【讨论】:

        猜你喜欢
        • 2016-04-03
        • 2016-05-29
        • 2012-01-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多