Как выполнить агрегацию метри c на поле ключевых слов? - PullRequest
0 голосов
/ 15 января 2020

У меня ниже 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. Будет ли способ заставить его работать в поле ключевого слова? или будет ли лучший способ достичь этой цели?

Большое спасибо

...