Ich habe eine index
mit vielen documents
in diesem Format:Wie bekomme ich das neueste Dokument nach einem Feld gruppiert?
{
"userId": 1234,
"locationDate" "2016-07-19T19:24:51+0000",
"location": {
"lat": -47.38163,
"lon": 26.38916
}
}
In diesem Index I von den Benutzern Inkrementalpositionen habe, alle paar Sekunden aktualisiert.
würde Ich mag eine Suche auszuführen, die mir die letzte Position (sortiert nach locationDate
) von jedem Benutzer (gruppiert nach userId
)
Ist das möglich mit Elasticsearch zurückkehren würde? das Beste, was ich tun konnte, war, alle Positionen aus den letzten 30 Sekunden zu erhalten, mit diesem:
{"query":{
"filtered" : {
"query" : {
"match_all" : { }
},
"filter" : {
"range" : {
"locationDate" : {
"from" : "2016-07-19T18:54:51+0000",
"to" : null,
"include_lower" : true,
"include_upper" : true
}
}
}
}
}}
Und dann nach, dass ich sie von Hand aussortieren, aber ich möchte diese auf Elasticsearch
direkt tunWICHTIG: ich verwende Elasticsearch 1.5.2
die 'order' versagt. Ist das die richtige Syntax? Ich erhalte folgende Nachricht: "AggregationExecutionException [Ungültiger Aggregator-Auftragspfad [locationDate]. Unbekannte Aggregation [locationDate]]}]" –
Entschuldigung. Das habe ich blind vorausgesetzt. Ich habe die Antwort mit etwas aktualisiert, das funktionieren sollte. –