2014-11-26 15 views
5

szukam sposób, aby uzyskać dane z „wczoraj” zamiast:elasticsearch zakres dat dostać wczoraj

"range" : { 
    "price" : { 
     "gt" : "2014-11-24", 
     "lt" : "2014-11-26" 
    } 
} 

chciałbym coś takiego:

"range" : { 
    "price" : { 
     "eq" : "2014-11-25" 
    } 
} 

Czy ktoś to przemyśleć mogłoby być możliwe?

mam na myśli coś takiego:

"range" : { 
    "price" : { 
     "gt" : "now-2d", 
     "lt" : "now" 
    } 
} 

Ale chciałbym, aby uzyskać dane z 00:00 do 0:00 pm

Odpowiedz

8

Spróbuj tego:

"query": { 
    "range": { 
     "price": { 
     "gt": "now-1d/d", 
     "lt": "now/d" 
     } 
    } 
    } 
+1

to będzie return null. Powinno to być 'teraz-2d/d' zamiast' 1'; lub możesz zmienić 'gt' na' gte', aby to naprawić. – Xiao

2

Odpowiedź od @ andrei-stefan jest sposobem, aby to zrobić, ale chciałem dodać trochę dodatkowego przykładu dla innych ludzi. na to pytanie.

Jeśli chcesz pobrać dane z wczoraj między 12:00 a 1:00 po południu zamiast cały dzień, można to zrobić z trochę więcej data Matematyka:

"query": { 
    "range": { 
     "price": { 
     "gt": "now-1d/d+12h", 
     "lt": "now-1d/d+13h" 
     } 
    } 
    } 

https://www.elastic.co/guide/en/elasticsearch/reference/current/common-options.html#date-math

+0

Jestem wdzięczny za twój rozszerzony przykład: Stworzyłem zapytanie dla okresu "teraz-2d/d" do "teraz-1d/d", ale zaczynało się mecz o 16:00 dzień wcześniej - okazało się, że dane jest w GMT, ale zapytanie jest wykonywane w PST. Przy "teraz-2d/d + 8h" i "teraz-1d/d + 8h" otrzymuję dokładnie właściwe dane. Będę musiał sobie przypomnieć, żeby zmienić 8h na 7h, kiedy zaczyna się DST. –

+0

^Korekta: Nie chodzi o to, że dane to GMT, ale ten dzień zaokrągla (/ d) używa 00:00 UTC. –

+0

@DaveLand To dobry punkt. Dobrze jest zachować daty w UTC w bazach danych i po stronie serwera, a następnie przekształcić je w czas lokalny po dotarciu do klienta. Kibana pokazuje rzeczy w czasie lokalnym, mimo że jest elastyczny w UTC. – Mnebuerquo

Powiązane problemy