保存在 ES 中的記錄有一個名為 updated_at 的欄位,它以 epoch 為單位存盤時間。在我的搜索查詢中,我根據“yyyy-mm-dd”格式過濾日期,如下所示:
{
"query": {
"bool": {
"must": [
{
"nested": {
"query": {
"bool": {
"filter": [
{
"range": {
"segment_status.updated_at": {
"from": "2022-05-16",
"to": "2022-05-16",
"include_lower": true,
"include_upper": true,
"boost": 1
}
}
}
],
"adjust_pure_negative": true,
"boost": 1
}
},
"path": "segment_status",
"ignore_unmapped": false,
"score_mode": "avg",
"boost": 1
}
}
]
}
}
}
我的時區是 GMT 05:30。我保存了一個紀元時間為 1652733000 的記錄,結果是 5 月 17 日凌晨 2:00 左右。使用上面的 ES 查詢,我達到了這個記錄,我假設這是因為 GMT 的時間是 5 月 16 日。
請驗證這一點,如果在生成查詢的代碼中有解決此問題的方法,這將很有幫助。
uj5u.com熱心網友回復:
你是對的,自紀元以來的那些毫秒計算時間是 2022 年 5 月 16 日星期一晚上 8:30:00 UTC 時間。如果您想讓用戶在他們自己的時區中按日期搜索,您必須停止考慮自己的時區。如果您可以訪問作為 LocalDate 物件的日期和用戶的時區,則可以使用自紀元以來的毫秒數對 elasticsearch 進行查詢:
LocalDate date = ...
Instant startOfDay = date.atStartOfDay(userZoneId).toInstant();
Instant endOfDay = startOfDay.plusMillis(3600 * 24 * 1000 - 1);
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/476424.html
