2016-04-21 5 views
0

Mein Index hat Daten wie unten erwähnt.Elasticsearch Gruppe von ID-Feld und führen Sie max auf Datum Feld

Id version_number groupId indexDate 
1 v1     1 2016-11-15T12:00:00 
2 v1     2 2016-11-20T12:00:00 
3 v2     2 2016-12-01T12:00:00 
4 v1     3 2016-13-01T12:00:00 
5 v1     4 2016-11-01T12:00:00 
6 v2     4 2016-13-01T12:00:00 
7 v1     5 2016-14-01T12:00:00 

Wie kann ich eine elasticsearch Abfrage in Java schreiben. Wenn ich nach Datum suche 2016-13-01T12: 00: 00 Ich erwarte, die letzte Version pro GroupId zu sehen, die indexDate kleiner oder gleich dem gesuchten Datum hat?

Ausgang erwartet:

Id version_number groupId indexDate 
1 v1     1  2016-13-01T12:00:00 
2 v2     2  2016-11-20T12:00:00 
6 v3     3  2016-10-01T12:00:00 
7 v2     4  2016-10-01T12:00:00 

ich nicht eine Max-Funktion auf Datumsfeld in Elasticsearch sehen, dies zu erreichen.

+0

Das ist eine seltsame Datum '2013-13-01T12: 00: 00 ';-) – Val

+0

zwei Fragen: Warum gehen wir nicht' v4' in Ihrer erwarteten Ausgabe sehen? Warum gibt es zwei Dokumente mit der ID 6? – Val

+0

Ich habe die Frage und Antwort bearbeitet. Ich habe v4 versehentlich im o/p verpasst. –

Antwort

0

würde ich zum ersten Mal Aggregat auf version_number und dann eine top_hits Unter Aggregation auf indexDate absteigend sortiert verwenden und die ID des ersten Dokuments dieser Eimer zurück.

{ 
    "size": 0, 
    "aggs": { 
    "by_version": { 
     "terms": { 
     "field": "version_number" 
     }, 
     "aggs": { 
     "max_date": { 
      "top_hits": { 
      "size": 1, 
      "sort": { 
       "indexDate": "desc" 
      }, 
      "_source": [ 
       "id" 
      ] 
      } 
     } 
     } 
    } 
    } 
} 
+0

Ich habe Ihre Anfrage in Java wie folgt übersetzt. Aber es gibt alle Versionen zurück, egal welches Datum ich anbiete. Kannst du bitte das gleiche wiederholen. ** client.prepareSearch (versionIndexName) .setTypes (versionIndexType) .addAggregation (AggregationBuilders.terms ("version"). field ("version"). size (0) .subAggregation (AggregationBuilders.topHits ("top"). setExplain (true) .setSize (1) .setFrom ((Größe * Index)). addSort ("versionDate", SortOrder.DESC) .setFetchSource (true))). execute(). actionGet(); ** –

+0

I verstehe nicht, was falsch ist. 'size (0)' gibt alle Versionen zurück – Val