在Elasticsearch中,我知道我可以使用来指定要从与查询匹配的文档中返回的字段{"fields":["fieldA", "fieldB", ..]}。
{"fields":["fieldA", "fieldB", ..]}
但是,如何返回与特定正则表达式匹配的所有字段的总和(作为新字段)?
例如,如果我的文档如下所示:
{"documentid":1, "documentStats":{ "foo_1_1":1, "foo_2_1":5, "boo_1_1:3 } }
我想要_1_每个文档匹配的所有统计信息的总和?
_1_
您可以定义一个script_field包含小Groovy脚本的人工字段,它将为您完成工作。
script_field
因此,查询之后,您可以添加以下script_fields部分:
script_fields
{ "query" : { ... }, "script_fields" : { "sum" : { "script" : "_source.documentStats.findAll{ it.key =~ '_1_'}.collect{it.value}.sum()" } } }
脚本所做的只是检索documentStats名称匹配的所有字段_1_并对其所有值求和,在这种情况下,您将得到4。
documentStats
在尝试进行此操作之前,请确保启用动态脚本输入elasticsearch.yml并重新启动ES节点。
elasticsearch.yml