如何使用脚本化指标聚合获取对象的所有键值对?

时间:2019-02-20 11:31:41

标签: java elasticsearch spring-data-elasticsearch elasticsearch-aggregation

我要使用Scripted Metric Aggregation。 因此,我创建了一个类似的指标:

ScriptedMetricAggregationBuilder aggregation = AggregationBuilders
                .scriptedMetric(aggregationName)
                .initScript(new Script("state.mapped = new HashMap()"))
                .mapScript(new Script("state.mapped['key'] = doc['field'].value"))
                .combineScript(new Script("return state.mapped"));

我这样使用它:

    NativeSearchQuery query = new NativeSearchQueryBuilder()
            .withQuery(rangeQuery)
            .addAggregation(aggregation)
            .build();

    InternalScriptedMetric metric = elasticsearchTemplate.query(query,
            response -> response.getAggregations().get(aggregationName));

我看到的只是空对象:

{"agg":{"value":[{},{},{}]}}

但是,如果我尝试获得doc['_id'].value,我可以看到结果:

{"agg":{"value":[{},{},{},{"key":"id"},{"key":"id2"}]}}

在这两种情况下,我都看不到任何例外/警告。

这只是我尝试做的一个简化示例。但这是行不通的。 我做错了什么?

UPD:

我可以通过以下方式访问关键字字段:

doc['field.keyword'].value

我可以通过以下方式访问对象字段:

doc['field.KEY'].value

但是如何获取对象的所有键值对?像field.entrySet()一样?

0 个答案:

没有答案