我有一個索引,檔案是:
id:1
type: Deposit
value:12
timestamp:2022.10.09T00.00.00
####
id:2
type: withdraw
value:15
timestamp:2022.10.9T00.00.00
####
id:3
type: Deposit
value:17
timestamp:2022.10.09T11.00.00
....
所以我運行多重聚合,例如:
"aggs": {
"s1": {
"terms": {
"field": "type",
"size": 10
},
"aggs": {
"SUM": {
"sum": {
"field": "value"
}
}
}
}
我的結果是:
“buckets”:[{“key”:“DEPOSIT”,“doc_count”:9,“SO”:{“value”:78983}},{“key”:“WITHDRAW”,“doc_count”:9,“SO " : { "價值" : 777445 } }
但我想計算“DEPOSIT 的價值 - WITHDRAW 的價值”。這是什么查詢???
uj5u.com熱心網友回復:
您可以為此使用bucket_script聚合。存盤桶腳本 aggs 如下所示。
"diff": {
"bucket_script": {
"buckets_path": {
"my_var1": "s1['field_value']>s2",
"my_var2": "s1['field_value']>s2"
},
"script": "params.my_var1 - params.my_var2"
}
}
我在下面分享詳細資訊和解決方案。
POST test_stackoverflow_question/_bulk
{"index":{}}
{"id":"1", "type": "Deposit", "value":12, "timestamp":"2022.10.09T00.00.00"}
{"index":{}}
{"id":"2", "type": "withdraw", "value":15, "timestamp":"2022.10.9T00.00.00"}
{"index":{}}
{"id":"3", "type": "Deposit", "value":17, "timestamp":"2022.10.09T11.00.00"}
如果術語指的是多部分聚合(例如 agg),則同級管道 ag 可以選擇從多桶中選擇特定鍵。例如,bucket_script 可以選擇(通過包鍵)兩個自定義存盤桶來執行計算:
GET test_stackoverflow_question/_search
{
"size": 0,
"aggs": {
"calculate_diff": {
"filters": {
"filters": {
"all": {
"match_all": {}
}
}
},
"aggs": {
"s1": {
"terms": {
"field": "type.keyword",
"size": 10
},
"aggs": {
"s2": {
"sum": {
"field": "value"
}
}
}
},
"diff": {
"bucket_script": {
"buckets_path": {
"my_var1": "s1['Deposit']>s2",
"my_var2": "s1['withdraw']>s2"
},
"script": "params.my_var1 - params.my_var2"
}
}
}
}
}
}
參考:

轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/525333.html
標籤:弹性搜索麋鹿弹性搜索无痛
