如何将 Elasticsearch Spring Data AggregationsContainer 内容映射到自定义模型?
How to map Elasticsearch Spring Data AggregationsContainer contents to custom model?
我正在使用 Elsaticsearch Spring 数据。我有一个基于 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
}
我return下面代码的结果:
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
}
Elasticsearch RestHighLevelClient 类 中没有用于聚合的数据模型,Spring Data Elasticsearch 中也没有 on。因此,原始 Aggregations
对象返回给调用者(包含在那个 AggregationContainer
中,因为它会随着新的新客户端实现而改变,然后容器将持有不同的对象)。
这个你自己去解析吧,我在另一个问题的答案中有一些东西()。对您来说有趣的是传递聚合的最后一个代码块。您基本上必须遍历元素,将它们转换为适当的类型并对其求值。
我正在使用 Elsaticsearch Spring 数据。我有一个基于 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
}
我return下面代码的结果:
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
}
Elasticsearch RestHighLevelClient 类 中没有用于聚合的数据模型,Spring Data Elasticsearch 中也没有 on。因此,原始 Aggregations
对象返回给调用者(包含在那个 AggregationContainer
中,因为它会随着新的新客户端实现而改变,然后容器将持有不同的对象)。
这个你自己去解析吧,我在另一个问题的答案中有一些东西(