Я не думаю, что вы можете получить массив, отформатированный как [20, 10, 40, 60, 80]
в ответе на запрос. Я не могу придумать, как получить его с помощью агрегатов или скриптовых полей. Тем не менее, вы можете легко (1) получить эту информацию из того же запроса, который задает агрегаты и логику фильтра; затем (2) постобработайте ответ на запрос, чтобы собрать все значения value
, используемые для вычисления среднего значения, отформатировав их так, как вы предпочитаете. То, как вы постобработаете свой ответ, зависит от клиента / сценария, который вы используете для отправки запросов в Elasticsearch.
Например, вы можете вывести значения, используемые для вычисления среднего значения, как хиты запросов.
{
"size": 100, <-- adjust this upper limit to your use case
"_source": "value", <-- include only the `value` field in the response
"query": {
"match": {
"condition": "A"
}
},
"aggs": {
"user_avg": {
"avg": {
"field": "value"
}
}
}
}
Или вы можете вывести значения, используемые для вычисления среднего, более компактным способом, используя термины агрегации.
{
"size": 0,
"_source": "value",
"query": {
"match": {
"condition": "A"
}
},
"aggs": {
"group_by_values": {
"terms": {
"field": "value",
"size": 100 . <-- adjust this upper limit to your use case
}
},
"user_avg": {
"avg": {
"field": "value"
}
}
}
}
Результат последнего будет примерно таким:
"aggregations" : {
"array_of_values" : {
"doc_count_error_upper_bound" : 0,
"sum_other_doc_count" : 0,
"buckets" : [
{
"key" : 50,
"doc_count" : 2
},
{
"key" : 60,
"doc_count" : 1
},
{
"key" : 100,
"doc_count" : 1
}
]
},
"user_avg" : {
"value" : 65.0
}
}