Группа агрегации Elasticsearch с использованием elastic4s

Я хочу запросить общую сумму продаж, сгруппированных по названию продукта в Elasticsearch

Как мне это сделать с помощью elastic4s?

client.execute {
      search ("sales"/ "sales_type")
        .query {rangeQuery("date") gte "01-01-2018"   lte "31-12-2018" }
          .aggs { termsAgg("s1","product_name")}
             .aggs  (sumAgg("sums","total_sum"))
}

в настоящее время мой код просто суммирует все в заданном диапазоне дат, а не группирует по названию продукта


person Nurs123    schedule 18.08.2018    source источник


Ответы (1)


В любом случае, вы, вероятно, уже нашли ответ, но вот мои 2 пенса для всех, кто столкнется с этим... вы, вероятно, захотите использовать субагрегацию для product_name, а не вторую агрегацию для всего набора данных.

Что-то вроде этого (непроверенный код, но на основе рабочей части одного из моих проектов):

.query {rangeQuery("date") gte "01-01-2018"   lte "31-12-2018" }
  .aggs { termsAgg("s1","product_name").subAggregations(
             sumAgg("sums","total_sum")
          )
        }

Результаты возвращаются в виде набора вложенных Map[String,Any], которые требуют некоторой сортировки, но некоторые операторы регистрации/печати и немного проб и ошибок разобрали это для меня.

Ссылка находится здесь: https://github.com/ guardian/archivehunter/blob/47372d55d458cfe31e5d9809910cc5d9a4bbb9bf/app/controllers/SearchController.scala#L203, в этом случае я обрабатываю его для рендеринга в интерфейсе браузера с помощью ChartJS.

Извиняюсь за краткость, но я в данный момент на работе и не могу долго писать :)

person fredex42    schedule 02.06.2019