我正在嘗試按 Elastic Search 產生的收入來列出前 100 位客人的名單。為此,我使用了一個terms和一個sum聚合。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"
}
}
}
}
}
}
這將回傳前 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
}
},
...
]
}
}
}
如何讓查詢回傳整個guests物件,而不僅僅是總和。
當我運行GET reservations/_search它回傳:
{
"hits": [
{
"_index": "reservations",
"_id": "1334620",
"_score": 1.0,
"_source": {
"id": "1334620",
"total": 110.8,
"payment": "unpaid",
"contact": {
"name": "John Doe",
"email": "[email protected]"
}
}
},
... other reservations
]
}
我想讓它與sum聚合一起回傳。
我嘗試使用top_hits聚合,使用_source它確實會回傳整個guest物件,但它不會顯示花費的總金額。并且在添加_source到sum聚合時會出錯。
我可以guest通過聚合回傳整個物件sum還是這不是正確的方法?
uj5u.com熱心網友回復:
我認為這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
}
}
}
}
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/485203.html
