使用elastic4s的Elasticsearch聚合组

Elasticsearch aggregation group by using 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"))
}

目前我的代码只是总结给定日期范围内的所有内容,而不是按产品名称分组

你现在可能已经找到了答案,但这是我给遇到这个问题的其他人的 2p 价值....你可能想在 product_name 上使用 sub-aggregation 而不是而不是对整个数据集进行第二次聚合。

类似这样的东西(未经测试的代码,但基于我的一个项目的工作部分):

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

返回的结果是一堆嵌套的 Map[String,Any],这需要一些整理,但是一些 logging/print 语句和一些反复试验为我整理出来了。

参考在这里:https://github.com/guardian/archivehunter/blob/47372d55d458cfe31e5d9809910cc5d9a4bbb9bf/app/controllers/SearchController.scala#L203,在这种情况下,我正在处理它以便使用 ChartJS 在浏览器前端中呈现。

抱歉为简洁起见,但我现在正忙着赶路 post :)