2017-10-13 65 views
1

持續一小時的記錄:得到我已在日期列下面的映射在elasticsearch

{ 
    "range": { 
     "order_datetime": { 
      "gte": "now-1h", 
      "lte": "now" 
     } 
    } 
} 

我:

"order_datetime": { 
    "type": "date", 
    "format" : "yyyy-M-d H:m:s" 
} 

我試圖讓使用下列範圍過濾器,查詢最近一小時的記錄我正在獲得在當前時間5到6小時之前訂購的訂單。任何人都可以解釋爲什麼發生?我覺得它是如此附着在time_zone如下一個時區的問題:

{ 
    "range": { 
     "order_datetime": { 
      "gte": "now-1h", 
      "lte": "now", 
      "time_zone": "+05:30" 
     } 
    } 
} 

我仍得到相同的結果。請幫助

+0

什麼是服務器在安裝ES的時區? – shantanuo

+0

它是亞洲/加爾各答,即從utc – pravindot17

+0

+05:30如果使用kibana,那麼你可以去高級設置和更改時區 – shantanuo

回答

1

首先,知道您是否使用Kibana來可視化您的數據會很有用?

該行爲有點奇怪,但可以解釋。

Elastic假定您使用UTC存儲日期(除非另有說明)。假設您的時區現在是16:30,並且您在日期字段中以16:30爲索引文檔。 Elastic認爲這是UTC的16:30,而實際上只有11:00在UTC(假設你是5:30前)--Elastic的日期現在始終是UTC。

所以,你有兩個選擇 -

  1. 指數數據,以便您通過時區與日期
  2. 更改您的查詢"lte": "now+5h+30m"

當指定的time_zone根據文檔,範圍查詢對now沒有任何影響。

參見「時區範圍查詢」 - https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-range-query.html

+0

非常感謝你救了我!它與「lte」合作:「現在+ 5h + 30m」 – pravindot17