elasticsearch Elasticsearch文档中字段总和的正确groovy脚本,elasticsearch,groovy,elasticsearch,Groovy" /> elasticsearch Elasticsearch文档中字段总和的正确groovy脚本,elasticsearch,groovy,elasticsearch,Groovy" />

elasticsearch Elasticsearch文档中字段总和的正确groovy脚本

elasticsearch Elasticsearch文档中字段总和的正确groovy脚本,elasticsearch,groovy,elasticsearch,Groovy,这个问题是一个后续问题 如果我的文档看起来是这样的: {"documentid":1, "documentStats":[ {"foo_1_1":1}, {"foo_2_1":5}, {"boo_1_1":3} ] } 在脚本字段中,返回每个文档中与特定模式匹配的所有documentStats之和的正确groovy脚本是什么(例如,包含\u 1)我不知道ES,但在纯groovy中,您可以: document.documentStats.collectMany { Map entry ->

这个问题是一个后续问题

如果我的文档看起来是这样的:

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

在脚本字段中,返回每个文档中与特定模式匹配的所有documentStats之和的正确groovy脚本是什么(例如,包含
\u 1

我不知道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()

希望这有帮助。

我不知道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()

希望这有帮助。

与前面提到的问题类似,有一行代码对您的新结构也有同样的作用:

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

与前面提到的问题类似,有一行代码对您的新结构执行相同的操作:

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