Я хочу использовать 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
И я могу получить доступ к полям объектаway:
doc['field.KEY'].value
Но как мне получить все пары ключ-значение для объекта?Как field.entrySet()
?