2015-03-12 8 views

Odpowiedz

3

Musisz wybrać inne podejście. Za pomocą skryptów można konwertować datę na dzień tygodnia. W przypadku tej wartości, jeśli zastosujesz agregację terminów, powinna ona działać poprawnie.

Script przekonwertować wartość czasu daty w dzień powszedni

Date date = new Date(doc['created_at'].value) ; 
java.text.SimpleDateFormat format = new java.text.SimpleDateFormat('EEE'); 
format.format(date) 

Query do uzyskania wartości

{ 
    "aggs": { 
    "perWeekDay": { 
     "terms": { 
     "script": "Date date = new Date(doc['created_at'].value) ; java.text.SimpleDateFormat format = new java.text.SimpleDateFormat('EEE');format.format(date)" 
     } 
    } 
    } 
} 

Można również znaleźć więcej przykładów dotyczące używania skryptów w agregacji here.

7

Może czegoś brakuje, ale czy odpowiedź nie jest prostsza niż odpowiedź Vineeth?

"aggregations": { 
    "timeslice": { 
     "histogram": { 
      "script": "doc['timestamp'].date.getHourOfDay()", 
      "interval": 1, 
      "min_doc_count": 0, 
      "extended_bounds": { 
       "min": 0, 
       "max": 23 
      }, 
      "order": { 
       "_key": "desc" 
      } 
     } 
    } 

To miłe, jak to będzie również obejmować wszelkie godziny zero wyników, a to będzie rozszerzyć wyniki obejmować cały okres 24 godzin (ze względu na extended_bounds).

Możesz użyć 'getDayOfWeek', 'getHourOfDay', ... (więcej informacji znajdziesz w 'Czasie Joda').

To jest świetne przez wiele godzin, ale w przypadku dni/miesięcy będzie podawana liczba, a nie nazwa miesiąca. Aby obejść, możesz uzyskać szczelinę czasową jako ciąg - , ale, to nie będzie działać z podejściem rozszerzonych granic, więc możesz mieć puste wyniki (tj. [Pon, Wt, Pt, Słońce]).

W sprawie, chcesz tego, to jest tutaj:

"aggregations": { 
    "dayOfWeek": { 
     "terms": { 
      "script": "doc['timestamp'].date.dayOfWeek().getAsText()", 
      "order": { 
       "_term": "asc" 
      } 
     } 
    } 

Nawet jeśli to nie pomoże, mam nadzieję, że ktoś inny będzie go znaleźć i korzystać z niego.

+3

Ten pracował dla mnie, ale musiałem użyć tego formatu do skryptu: ' "skrypt".„Doc [ 'timestamp'] dacie. dayOfWeek "' Zauważ brakujący nawias. – Derek

1

Dla ES5 stosując bezbolesne, to działa:

"aggs": { 
    "dayOfWeek": { 
     "terms": { 
      "script": { 
       "inline": "doc['date_utc'].date.dayOfWeek", 
       "lang": "painless" 
      } 
     } 
    } 
} 
+0

cześć, czy możesz mi powiedzieć, jak możemy uzyskać dzień tygodnia w formacie tekstowym, np. W poniedziałek, wtorek itp. – pravindot17

Powiązane problemy