【发布时间】:2021-02-11 21:05:18
【问题描述】:
如何在复合聚合中进行桶排序?
我需要使用桶排序进行复合聚合。
我尝试过使用聚合进行排序。 我试过复合聚合。
【问题讨论】:
标签: elasticsearch elastic-stack dsl querydsl elk
如何在复合聚合中进行桶排序?
我需要使用桶排序进行复合聚合。
我尝试过使用聚合进行排序。 我试过复合聚合。
【问题讨论】:
标签: elasticsearch elastic-stack dsl querydsl elk
我认为这个问题是您之前的@987654321@ 的延续,因此考虑相同的用例
您需要使用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"
},
"doc_count": 1,
"sort_user": {
"value": 1.4200704E12,
"value_as_string": "2015-01-01T00:00:00.000Z"
}
},
{
"key": {
"product": "user2"
},
"doc_count": 1,
"sort_user": {
"value": 1.3885344E12,
"value_as_string": "2014-01-01T00:00:00.000Z"
}
}
]
}
【讨论】:
size 参数。请仔细阅读我更新的问题部分。
size 参数设置为该值。如果您的用例与此不同,我建议您针对此修改后的用例提出单独的问题(以便社区可以帮助您)。在同一个问题中混合不同的用例变得很难回答。而且,如果我的回答对您有所帮助,那么如果您可以投票并接受它,那就太好了 TIA :)