У меня ниже elasti c index:
Магазин
{
"mappings": {
"properties": {
"id": { "type": "integer" },
"name": { "type": "keyword" },
"address": { "type": "text" },
"city_id": { "type": "integer" },
"city_name": { "type": "keyword" }
}
}
}
Теперь одно и то же название города даст тот же city_id.
Я бы хотел выполнить term_aggregation для city_id, но сортируйте ключ корзины по имени города в лексическом порядке. Пока что это то, что я придумал:
{
"aggs": {
"cityId": {
"terms": {
"field": "city_id",
"order" = {
"maxCity": "asc"
}
},
"aggs": {
"topCity": {
"top_hits": {
"size" : 1
},
"aggs": {
"maxCity": {
"max": {
"field": "city_name"
}
}
}
}
}
}
Идея состоит в том, что, поскольку я могу гарантировать, что каждая корзина city_id будет возвращать строки с одним и тем же названием city_name, я мог бы просто выполнить агрегацию вложенных topHits, вернуть ту строку (размер 1), а затем выполнить агрегацию метри c в поле city_name (min, max), чтобы получить соответствующее city_name для этого ключа корзины. Затем я могу указать порядок агрегации моих терминов как агрегацию метри c как c.
Однако, похоже, что агрегация метри c поддерживает только поле цифр c. Будет ли способ заставить его работать в поле ключевого слова? или будет ли лучший способ достичь этой цели?
Большое спасибо