[英]Convert timestamps to datetime for use in Elasticsearch aggregations
我有一個 SendGrid 事件數據的索引:
"_source": {
"externalId": "9283cc1d-b003-xxxx-a5af-84fcf31c4181",
"email": "test@test.com",
"timestamp": 1616515214,
"event": "processed",
"uid": null,
"id": null,
"sendgridEventId": null,
"smtpId": null,
"sgMessageId": null,
"sgEventId": null,
"sendgridEvent": null,
"type": null,
"category": [],
"reason": null,
"status": null,
"url": null,
"useragent": null,
"ip": null,
"response": null,
"tls": null,
"attempt": null,
"sendAt": null,
"asmGroupId": null
}
現在,我喜歡使用timestamp
屬性匯總給定日期的所有這些事件。
GET /sendgridevententity/_search
{
"query":
{
"match_all": {}
},
"aggs": {
"amount_per_day": {
"date_histogram": {
"field": "timestamp",
"calendar_interval": "1d"
}
}
}
}
不幸的是,這只會產生所有單個事件,因為它們都有不同的時間戳,並且聚合不會按天對它們進行分組。
如何將時間戳轉換為date
然后運行聚合?
您可以利用多字段映射。 這是它的工作原理。
timestamp
最初被映射為long
。 我還假設時間戳以紀元秒為單位,因此明確設置了format
:POST sendgridevententity/_mapping
{
"properties": {
"timestamp": {
"type": "long",
"fields": {
"as_date": {
"type": "date",
"format": "epoch_second"
}
}
}
}
}
_update_by_query
請求:POST sendgridevententity/_update_by_query
GET /sendgridevententity/_search
{
"size": 0,
"query": {
"match_all": {}
},
"aggs": {
"amount_per_day": {
"date_histogram": {
"field": "timestamp.as_date",
"format": "yyyy-MM-dd",
"calendar_interval": "1d"
}
}
}
}
⚠️ 根據您的索引大小和許多其他因素, _update_by_query
請求可能會出現超時。 可以設置wait_for_completion=false
這將觸發異步后台任務。
請注意,我在最終請求中使用了size: 0
。 這是一個只返回聚合結果的方便工具。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.