Ich habe eine sortierte Elasticsearch-Histogramm-Aggregation, die so funktioniert wie sie ist.
Ich muss ein Feld aus dem ersten und letzten Dokument jedes Aggregations-Buckets zurückgeben.
Aktuelle Abfrage (Ruby-artige Syntax):
{
query: {
filtered: {
filter: {
bool: {
must: [
{ term: { some_id: "something" } },
{ range: {
completed_at: {
gte: start,
lte: end
}
}
}
]
}
},
_cache: true,
_cache_key: "special-query"
}
},
aggs: {
intervals: {
histogram: {
field: "completed_at",
interval: 24.hours.to_i,
min_doc_count: 0,
order: { _key: "asc" }
},
aggs: {
start_at: { min: { field: "completed_at" } },
end_at: { max: { field: "completed_at" } },
price_stats: { extended_stats: { field: "rate" } },
}
}
}
}
Ich habe die Dokumentation durchsucht undgoogelt ausgiebig, kann aber keine Lösungen finden. Zur Zeit muss ich eine zweite Abfrage an die Datenbank senden, um explizit alle Werte für dieses Feld abzurufen, aber ich möchte diese Funktionalität in meine elasticsearch-Abfrage einfügen.
Antworten:
6 für die Antwort № 1Sie möchten ein Ergebnis pro Aggregationsrecht zurückgeben?
Das nennt man Field Collapsing und ist leider noch nicht in Elasticsearch verfügbar, siehe: https://github.com/elasticsearch/elasticsearch/issues/256
Update September 2014
Wie @Bpierce in den Kommentaren unten: Jetzt, dass Elasticsearch 1.3.x ist out, field collapsing ist über die top_hits-Aggregation verfügbar. Ich verwende es derzeit in einer ähnlichen Abfrage.