我正在嘗試撰寫一個查詢來獲取具有特定 Id 的檔案的每月值的總和。為此,我正在嘗試:
query = {
"size": 0,
"aggs" : {
"articles_over_time" : {
"date_histogram" : {
"field" : "timestamp",
"interval" : "month"
}
},
"value": {
"sum": {
"field": "generatedTotal"
}
}
}
}
這個查詢會給我generatedTotal每個月的總和,但它給我generatedTotal所有檔案的總和。如何指定獲取generatedTotal特定每月的總和generatorId?
Elasticsearch 索引中的檔案示例:
{'id': 0, 'timestamp': '2018-01-01', 'generatorId': '150', 'generatedTotal': 2166.8759558092734}
uj5u.com熱心網友回復:
如果你像這樣分開做,它算作 2 個不同的聚合。您首先需要查詢所需的特定 generatorId,然后在第一個 aggs 中執行第二個 aggs:
{
"size": 0,
"query": {
"term": {
"generatorId": "150"
}
},
"aggs": {
"articles_over_time": {
"date_histogram": {
"field": "timestamp",
"interval": "month"
},
"aggs": {
"monthlyGeneratedTotal": {
"sum": {
"field": "generatedTotal"
}
}
}
}
}
}
4個示例檔案(1個具有不同的generatorId,不計入聚合)
{"timestamp": "2018-02-01", "generatedTotal": 3, "generatorId": "150"}
{"timestamp": "2018-01-01", "generatedTotal": 1, "generatorId": "150"}
{"timestamp": "2018-01-01", "generatedTotal": 2, "generatorId": "150"}
{"timestamp": "2018-01-01", "generatedTotal": 2, "generatorId": "160"}
然后您將擁有如下聚合:
{
"aggregations": {
"articles_over_time": {
"buckets": [
{
"key_as_string": "2018-01-01T00:00:00.000Z",
"key": 1514764800000,
"doc_count": 2,
"monthlyGeneratedTotal": {
"value": 3.0
}
},
{
"key_as_string": "2018-02-01T00:00:00.000Z",
"key": 1517443200000,
"doc_count": 1,
"monthlyGeneratedTotal": {
"value": 3.0
}
}
]
}
}
}
我希望這回答了你的問題。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/343273.html
