【发布时间】:2021-12-30 09:19:56
【问题描述】:
我正在使用 Elsaticsearch Spring Data。我有一个自定义存储库,它根据docs 上的示例使用 ElasticsearchOperations。我需要一些聚合查询结果,并且我成功地得到了预期的结果。但我需要将这些结果映射到模型。但目前我无法访问 AggregationsContainer 的内容。
override fun getStats(startTime: Long, endTime: Long, pageable: Pageable): AggregationsContainer<*>?
{
val query: Query = NativeSearchQueryBuilder()
.withQuery(QueryBuilders.rangeQuery("time").from(startTime).to(endTime))
.withAggregations(AggregationBuilders.sum("discount").field("discount"))
.withAggregations(AggregationBuilders.sum("price").field("price"))
.withPageable(pageable)
.build()
val searchHits: SearchHits<Product> = operations.search(query, Product::class.java)
return searchHits.aggregations
}
我返回以下代码的结果:
val stats = repository.getTotalStats(before, currentTime, pageable)?.aggregations()
结果是:
{
"asMap": {
"discount": {
"name": "discount",
"metadata": null,
"value": 8000.0,
"valueAsString": "8000.0",
"type": "sum",
"fragment": true
},
"price": {
"name": "price",
"metadata": null,
"value": 9000.0,
"valueAsString": "9000.0",
"type": "sum",
"fragment": true
}
},
"fragment": true
}
如何将上述输出转换为预期的输出模型,如下所示?因为我测试了 aggregations() 的内容是不可访问的,并且类型是 Any :
{
"priceSum":9000.0,
"discountSum":8000
}
【问题讨论】:
标签: kotlin elasticsearch spring-data spring-data-elasticsearch