Чего вы пытаетесь достичь?
Агрегирование группируется
.Aggregations(ag => ag
.Terms("cpu_aggs", sa => sa.Field("system.cpu.total.pct").Size(1))
.Terms("memory_aggs", sa => sa.Field("system.memory.actual.used.pct").Size(1))
.Terms("diskio_aggs", sa => sa.Field("docker.diskio.summary.bytes").Size(1))
.Terms("load_aggs", sa => sa.Field("system.load.5").Size(1))
)
.Terms("cpu_aggs", sa => sa.Field("system.cpu.total.pct").Size(1)
Means you want the most (and only because of the size(1) system.cpu.total.pct in your data
then
.Terms("memory_aggs", sa => sa.Field("system.memory.actual.used.pct").Size(1))
=> наибольшим значением system.memory.actual.used.pct и т. Д.
All these aggregation are at the same level, so you will have most reccurent pct, most recurent memory, more recurent bytes ect...Each of these aggregations is independant and will scan all your document.
Your sort is not apply to aggregation, it will be apply to your query, by default, 10 documents are returned, so it will return the last 10 documents.
Агрегация выполняется для анализа различных документов (возврат, среднее, максимальное, количество, сумма ...).
Например, что вы можете сделать:
сначала , если вы хотите работать только с агрегацией, не запрашивайте документ, поставьте .Size (0).
var elasticResponse = Client.Search<object>(s => s
.Size(0)
.Aggregations(ag => ag
Если вы хотите произвести агрегацию в поле, получите, например, еще 10 рекуррентных значение:
.Terms("cpu_aggs", sa => sa.Field("system.cpu.total.pct").Size(10)
Если вы хотите, чтобы еще 10 повторяющихся «system.cpu.total.pct» с последним документом для каждого из них
.Terms("cpu_aggs", sa => sa.Field("system.cpu.total.pct")).TopHits("topcpu", r => r.Field("@timestamp").Sort(ss => ss.Descending()).Size(1)))
Если вы хотите 10 более рекуррентный "cpu_aggs", и когда для каждого из этого верхнего значения процессора 5 верхних "system.load.5"
.Terms("cpu_aggs", sa => sa.Field("docker.diskio.summary.bytes").Size(10)
.Aggregations(subag => subag.Terms("subaggr", sua => sua.Field("system.load.5").Size(5))
))
, если вам нужна статистика (если system.cpu.total.pct - это число например)
.Stats("cpu_stats", sa => sa.Field("system.cpu.total.pct"))
Если вам нужен только последний документ, вам не нужно агрегировать:
var elasticResponse = elasticClient.Search<object>(s => s
.Size(1)
.Sort(so => so.Descending("@timestamp"))
);
Если это не ответ на ваш вопрос просьба уточнить, и присоединиться к примеру того, что вам нужно.