2017-10-13 4 views
1

je suit la cartographie sur ma colonne Date:obtenir des enregistrements durent une heure dans ElasticSearch

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

Je suis en train d'obtenir les dossiers durent une heure à l'aide de filtre de plage suivante dans la requête:

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

I Je reçois les commandes qui sont commandées avant 5 à 6 heures de l'heure actuelle. Quelqu'un peut-il expliquer pourquoi cela se passe? Je pense qu'il est un problème de fuseau horaire si attaché le time_zone comme ci-dessous:

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

Je suis toujours obtenir le même résultat. S'il vous plaît aider

+0

Quel est le fuseau horaire du serveur sur lequel est installé ES? – shantanuo

+0

c'est l'Asie/Kolkata c'est-à-dire +05: 30 de l'utc – pravindot17

+0

Si vous utilisez Kibana, alors vous pouvez aller à Advanced Setting et changer le fuseau horaire – shantanuo

Répondre

1

Premièrement, il serait utile de savoir si vous utilisez Kibana pour visualiser vos données?

Le comportement est un peu étrange, mais peut être expliqué. Elastic suppose que vous stockez des dates en UTC (sauf indication contraire). Supposons maintenant 16:30 dans votre fuseau horaire et vous indexez un document avec 16:30 dans le champ de date. Elastic pense que c'est 16:30 UTC, alors que c'est seulement 11:00 en UTC (en supposant que vous êtes à 5:30) - la date 'maintenant' dans Elastic est toujours UTC.

Donc, vous avez deux options -

  1. Index vos données afin que vous passez le fuseau horaire avec la date
  2. Changer votre requête "lte": "now+5h+30m"

Lorsque vous spécifiez le time_zone dans la requête de plage, il ne fait rien à now selon la documentation.

« Fuseau horaire dans la requête de la plage » Voir - https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-range-query.html

+0

merci beaucoup vous m'avez sauvé !!! Cela a fonctionné avec "lte": "maintenant + 5h + 30m" – pravindot17