0

Ich habe eine Reihe von Dokumenten in ElasticSearch 5.5 mit zwei Datumsfeldern: start_date und end_date. Ich möchte sie in Datum Histogramme Buckets aggregieren (ex: wöchentlich), so dass, wenn die start_date < Woche X < end_date, Dokument wäre dann in "Woche X" -Bucket. Dies bedeutet, dass sich ein einzelnes Dokument möglicherweise in mehreren Buckets befindet.Elasticsearch: Dokumente basierend auf dem Datumsbereich zusammenfassen

Betrachten Sie das folgende konkrete Beispiel: Ich habe eine Reihe von Dokumenten, die Mitarbeiter des Unternehmens beschreiben, und für jeden Mitarbeiter haben Sie Einstellungsdatum und (optional) Kündigungsdatum. Ich möchte ein Datumshistogramm der Anzahl der aktiven Mitarbeiter für die letzten zwölf Monate erstellen.

Beispiel doc Inhalt:

{ 
    "start_date": "2013-01-12T00:00:00.000Z", 
    "end_date": "2016-12-08T00:00:00.000Z", 
    "id": "123123123" 
} 

Gibt es eine Möglichkeit, dies in ES zu tun?

+0

immer unterstützen Sie Ihre Fragen mit geeigneten JSON, um Beispiel zu Usecases zu zeigen. thx – user3775217

+0

hinzugefügt, obwohl es nicht wie es ist das Hinzufügen von viel Wert –

+0

ist es nicht über Wert, es ist, wenn ich den Beitrag lesen, sollte ich in der Lage sein, Ihr Problem besser zu visualisieren und offensichtlich eine formatierte json tut nicht weh tun viel. – user3775217

Antwort

1

Ich habe einen Weg gefunden, dies zu tun, mit Filter-Aggregationen ( https://www.elastic.co/guide/en/elasticsearch/reference/master/search-aggregations-bucket-filter-aggregation.html). Wenn ich brauche, sagen sie, 12 nachlaufMonatsBericht, dann würde ich 12 Eimer schaffen, wo jeder Eimer Filterbedingungen definiert, wie zum Beispiel:

"bool":{ 
"must":[{ 
    "range":{ 
    "start_date":{ 
    "lte":"2016-01-01T00:00:00.000Z" 
    } 
    } 
},{ 
{ 
    "range":{ 
    "end_date":{ 
    "gt":"2016-02-01T00:00:00.000Z" 
    } 
    } 
}] 
} 

Allerdings glaube ich, dass es schön wäre, wenn es ein einfacherer Weg ist um dies zu tun, denn wenn ich sagen möchte, 365 Tage hinterher zu schreiben, bedeutet das, dass ich 365 Bucket-Filter erstellen muss, was die resultierende Abfrage sehr groß macht.

Verwandte Themen