2017-10-13 3 views
1

의 마지막 시간 기록을 얻을 :내가 내 날짜 열에서 매핑을 다음 한 elasticsearch

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

I을 : 나는 얻기 위해 노력하고

"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

아시아/콜카타 즉, +05 : 30부터 utc – pravindot17

+0

키바나를 사용하는 경우 고급 설정으로 이동하여 시간대를 변경할 수 있습니다. – shantanuo

답변

1

우선, 데이터를 시각화하기 위해 키바나를 사용하고 있는지 알고 있으면 유용 할 것입니다.

동작이 약간 이상하지만 설명 할 수 있습니다.

탄성은 사용자가 UTC로 날짜를 저장한다고 가정합니다 (달리 말하지 않는 한). 지금은 시간대가 16시 30 분이고 날짜 필드의 16시 30 분을 사용하여 문서의 색인을 생성한다고 가정합니다. Elastic은 이것을 16시 30 분 UTC라고 생각하지만 UTC (실제로는 5시 30 분이라고 가정)는 11시에 불과합니다. Elastic의 'now'는 항상 UTC입니다. 당신이 time_zone의를 지정하는 경우

  • "lte": "now+5h+30m"
  • 에 조회를 변경 날짜와 시간대를 통과 할 수 있도록

    1. 색인 데이터를 -

      그래서, 당신은 두 가지 옵션이 있습니다 범위 쿼리는 문서에 따라 now을 수행하지 않습니다.

      페이지의 '범위 쿼리 시간대'- https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-range-query.html

    +0

    감사합니다. "lte"와 함께 작동했습니다 : "now + 5h + 30m" – pravindot17