具有总和聚合的 Elastic Search return 对象
Elastic Search return object with sum aggregation
我正在尝试获取 Elastic Search 产生的收入排名前 100 位的客人名单。为此,我使用了 terms
和 sum
聚合。但是它确实 return 正确的值,我想 return 整个 guest
具有聚合的对象。
这是我的查询:
GET reservations/_search
{
"size": 0,
"aggs": {
"top_revenue": {
"terms": {
"field": "total",
"size": 100,
"order": {
"top_revenue_hits": "desc"
}
},
"aggs": {
"top_revenue_sum": {
"sum": {
"field": "total"
}
}
}
}
}
}
此 return 是前 100 位客人的列表,但仅显示他们消费的金额:
{
"aggregations" : {
"top_revenue" : {
"doc_count_error_upper_bound" : -1,
"sum_other_doc_count" : 498,
"buckets" : [
{
"key" : 934.9500122070312,
"doc_count" : 8,
"top_revenue_hits" : {
"value" : 7479.60009765625
}
},
{
"key" : 922.0,
"doc_count" : 6,
"top_revenue_hits" : {
"value" : 5532.0
}
},
...
]
}
}
}
如何查询 return 整个 guests
对象,而不仅仅是总金额。
当我运行GET reservations/_search
它returns:
{
"hits": [
{
"_index": "reservations",
"_id": "1334620",
"_score": 1.0,
"_source": {
"id": "1334620",
"total": 110.8,
"payment": "unpaid",
"contact": {
"name": "John Doe",
"email": "john@mail.com"
}
}
},
... other reservations
]
}
我想通过 sum
聚合将其添加到 return。
我曾尝试使用 top_hits
聚合,使用 _source
它会 return 整个 guest
对象,但它不会显示花费的总金额。当将 _source
添加到 sum
聚合时,它会出错。
我可以 return 整个 guest
对象与 sum
聚合还是这不是正确的方法?
我假设 contact.name
在映射中是 keyword
。以下查询应该适合您。
{
"size": 0,
"aggs": {
"guests": {
"terms": {
"field": "contact.name",
"size": 100
},
"aggs": {
"sum_total": {
"sum": {
"field": "total"
}
},
"sortBy": {
"bucket_sort": {
"sort": [
{ "sum_total": { "order": "desc" } }
]
}
},
"guest": {
"top_hits": {
"size": 1
}
}
}
}
}
}
我正在尝试获取 Elastic Search 产生的收入排名前 100 位的客人名单。为此,我使用了 terms
和 sum
聚合。但是它确实 return 正确的值,我想 return 整个 guest
具有聚合的对象。
这是我的查询:
GET reservations/_search
{
"size": 0,
"aggs": {
"top_revenue": {
"terms": {
"field": "total",
"size": 100,
"order": {
"top_revenue_hits": "desc"
}
},
"aggs": {
"top_revenue_sum": {
"sum": {
"field": "total"
}
}
}
}
}
}
此 return 是前 100 位客人的列表,但仅显示他们消费的金额:
{
"aggregations" : {
"top_revenue" : {
"doc_count_error_upper_bound" : -1,
"sum_other_doc_count" : 498,
"buckets" : [
{
"key" : 934.9500122070312,
"doc_count" : 8,
"top_revenue_hits" : {
"value" : 7479.60009765625
}
},
{
"key" : 922.0,
"doc_count" : 6,
"top_revenue_hits" : {
"value" : 5532.0
}
},
...
]
}
}
}
如何查询 return 整个 guests
对象,而不仅仅是总金额。
当我运行GET reservations/_search
它returns:
{
"hits": [
{
"_index": "reservations",
"_id": "1334620",
"_score": 1.0,
"_source": {
"id": "1334620",
"total": 110.8,
"payment": "unpaid",
"contact": {
"name": "John Doe",
"email": "john@mail.com"
}
}
},
... other reservations
]
}
我想通过 sum
聚合将其添加到 return。
我曾尝试使用 top_hits
聚合,使用 _source
它会 return 整个 guest
对象,但它不会显示花费的总金额。当将 _source
添加到 sum
聚合时,它会出错。
我可以 return 整个 guest
对象与 sum
聚合还是这不是正确的方法?
我假设 contact.name
在映射中是 keyword
。以下查询应该适合您。
{
"size": 0,
"aggs": {
"guests": {
"terms": {
"field": "contact.name",
"size": 100
},
"aggs": {
"sum_total": {
"sum": {
"field": "total"
}
},
"sortBy": {
"bucket_sort": {
"sort": [
{ "sum_total": { "order": "desc" } }
]
}
},
"guest": {
"top_hits": {
"size": 1
}
}
}
}
}
}