Как получить все пары ключ-значение для объекта с помощью агрегированной метрики по сценариям? - PullRequest
0 голосов
/ 20 февраля 2019

Я хочу использовать 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()?

...