在Elasticsearch中投影与正则表达式匹配的文档中所有字段的总和

Elasticsearch中,我知道我可以使用来指定要从与查询匹配的文档中返回的字段{"fields":["fieldA", "fieldB",

..]}

但是,如何返回与特定正则表达式匹配的所有字段的总和(作为新字段)?

例如,如果我的文档如下所示:

{"documentid":1,

"documentStats":{

"foo_1_1":1,

"foo_2_1":5,

"boo_1_1:3

}

}

我想要_1_每个文档匹配的所有统计信息的总和?

回答:

您可以定义一个script_field包含小Groovy脚本的人工字段,它将为您完成工作。

因此,查询之后,您可以添加以下script_fields部分:

{

"query" : {

...

},

"script_fields" : {

"sum" : {

"script" : "_source.documentStats.findAll{ it.key =~ '_1_'}.collect{it.value}.sum()"

}

}

}

脚本所做的只是检索documentStats名称匹配的所有字段_1_并对其所有值求和,在这种情况下,您将得到4。

在尝试进行此操作之前,请确保启用动态脚本输入elasticsearch.yml并重新启动ES节点。

以上是 在Elasticsearch中投影与正则表达式匹配的文档中所有字段的总和 的全部内容, 来源链接: utcz.com/qa/399084.html

回到顶部