我要使用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()
一样?