问题描述
如何在复合聚合中对存储桶进行排序?
我需要使用Bucket排序进行复合聚合。
我尝试使用聚合排序。 我已经尝试过复合聚合。
解决方法
我认为这个问题是您先前的question的延续,因此被认为是相同的用例
您需要使用作为父管道的Bucket sort aggregation 对其父多桶的桶进行排序的聚合 聚合。并且,请参阅composite aggregation上的此文档以了解更多信息。
添加包含索引数据,映射,搜索查询和搜索结果的工作示例
索引映射:
{
"mappings":{
"properties":{
"user":{
"type":"keyword"
},"date":{
"type":"date"
}
}
}
}
索引数据:
{
"date": "2015-01-01","user": "user1"
}
{
"date": "2014-01-01","user": "user2"
}
{
"date": "2015-01-11","user": "user3"
}
搜索查询:
可以设置size parameter来定义多少个复合存储桶 应该退货。每个复合桶都被视为一个 存储桶,因此将大小设置为10将返回前10个复合 从值源创建的存储桶。响应包含 包含值的数组中每个复合存储桶的值 从每个值源中提取。默认值为10。
{
"size": 0,"aggs": {
"my_buckets": {
"composite": {
"size": 3,<-- note this
"sources": [
{
"product": {
"terms": {
"field": "user"
}
}
}
]
},"aggs": {
"mySort": {
"bucket_sort": {
"sort": [
{
"sort_user": {
"order": "desc"
}
}
]
}
},"sort_user": {
"min": {
"field": "date"
}
}
}
}
}
}
搜索结果:
"aggregations": {
"my_buckets": {
"after_key": {
"product": "user3"
},"buckets": [
{
"key": {
"product": "user3"
},"doc_count": 1,"sort_user": {
"value": 1.4209344E12,"value_as_string": "2015-01-11T00:00:00.000Z"
}
},{
"key": {
"product": "user1"
},"sort_user": {
"value": 1.4200704E12,"value_as_string": "2015-01-01T00:00:00.000Z"
}
},{
"key": {
"product": "user2"
},"sort_user": {
"value": 1.3885344E12,"value_as_string": "2014-01-01T00:00:00.000Z"
}
}
]
}